c語言excel
A. 怎樣在Excel中添加用c語言編寫的程序
基本思路
基礎實現方法同上篇文章《直接通過ODBC讀、寫Excel表格文件》相同,都是通過ODBC來把Excel表格文件當成資料庫文件來進行讀、寫等操作,所以在Excel表格文件中寫入的行頭名必須是唯一的(不要重名,相當於資料庫中的ID值)。本文中對Excel文件的操作都被封裝進一個類CSpreadSheet中,通過它我們可以非常簡便的實現各種Excel表格數據操作,並且可以對該類進行擴充來滿足自己的需求。
具體實現
一、 包含Excel文件操作類頭文件
#include "CSpreadSheet.h"
二、 新建Excel文件,並寫入默認數據
// 新建Excel文件名及路徑,TestSheet為內部表名
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray sampleArray, testRow;
SS.BeginTransaction();
// 加入標題
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年齡");
SS.AddHeaders(sampleArray);
// 加入數據
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鵬"};
CString strAge[] = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++)
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}
SS.Commit();
三、 讀取Excel文件數據
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Rows, Column;
//清空列表框
m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++)
{
// 讀取一行
SS.ReadRow(Rows, i);
CString strContents = "";
for (int j = 1; j <= Rows.GetSize(); j++)
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents + " --> " + Rows.GetAt(j-1);
}
m_AccessList.AddString(strContents);
}
四、 對已存在Excel表格數據進行添加、插入、替換操作
// 初始化測試行數據,進行添加、插入及替換數據操作演示
for (int k = 1; k <= 2; k++)
{
testRow.Add("Test");
}
SS.AddRow(testRow); // 添加到尾部
SS.AddRow(testRow, 2); // 插入新行到第二行
SS.AddRow(testRow, 6, true); // 替換原第四行來新的內容
SS.AddCell("徐景周", 1,2); // 添加(不存在)或替換(存在)第二行,第一列單元格內容
SS.Commit();
五、 對已存在Excel表格數據進行行、列、單元格查詢
void CExcelAccessDlg::OnQuery()
{
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Rows, Column;
CString tempString = "";
UpdateData();
if(m_strRow == "" && m_strColumn == "") // 查詢為空
{
AfxMessageBox("行號、列號不能同時為空!");
return;
}
else if(m_strRow == "" && m_strColumn != "") // 查詢指定列數據
{
int iColumn = atoi(m_strColumn);
int iCols = SS.GetTotalColumns();
if(iColumn > iCols) // 超出表范圍查詢時
{
CString str;
str.Format("表中總列數為: %d, ", iCols);
AfxMessageBox(str + " 查詢列數大於Excel表中總列數,請重新輸入!");
return;
}
// 讀取一列數據,並按行讀出
if(!SS.ReadColumn(Column, iColumn))
{
AfxMessageBox(SS.GetLastError());
return;
}
CString tmpStr;
for (int i = 0; i < Column.GetSize(); i++)
{
tmpStr.Format("行號: %d, 列號: %d ,內容: %s\n", i+1,iColumn,Column.GetAt(i));
tempString += tmpStr;
}
AfxMessageBox(tempString);
}
else if(m_strRow != "" && m_strColumn == "") // 查詢指定行數數據
{
int iRow = atoi(m_strRow);
int iRows = SS.GetTotalRows();
if(iRow > iRows) // 超出表范圍查詢時
{
CString str;
str.Format("表中總行數為: %d, ", iRows);
AfxMessageBox(str + " 查詢行數大於Excel表中總行數,請重新輸入!");
return;
}
// 讀取指定行數據
if(!SS.ReadRow(Rows, iRow))
{
AfxMessageBox(SS.GetLastError());
return;
}
CString tmpStr;
for (int i = 0; i < Rows.GetSize(); i++)
{
tmpStr.Format("行號: %d, 列號: %d ,內容: %s\n", iRow, i+1, Rows.GetAt(i));
tempString += tmpStr;
}
AfxMessageBox(tempString);
}
else if(m_strRow != "" && m_strColumn != "") // 查詢指定單元格數據
{
int iRow = atoi(m_strRow), iColumn = atoi(m_strColumn);
int iRows = SS.GetTotalRows(), iCols = SS.GetTotalColumns();
if(iColumn > iCols) // 超出表范圍查詢時
{
CString str;
str.Format("表中總列數為: %d, ", iCols);
AfxMessageBox(str + " 查詢列數大於Excel表中總列數,請重新輸入!");
return;
}
else if(iRow > iRows)
{
CString str;
str.Format("表中總行數為: %d, ", iRows);
AfxMessageBox(str + " 查詢行數大於Excel表中總行數,請重新輸入!");
return;
}
// 讀取指定行、列單元格數據
if(!SS.ReadCell(tempString, iColumn, iRow))
{
AfxMessageBox(SS.GetLastError());
return;
}
CString str;
str.Format("行號: %d, 列號: %d ,內容: %s", iRow,iColumn,tempString);
AfxMessageBox(str);
}
}
六、 將存在的Excel轉換另存為指定分隔的文本文件
// 將原Excel文件轉換為用分號分隔的文本,並另存為同名文本文件
SS.Convert(";");
七、 刪除Excel中表格
SS. DeleteSheet(); // 刪除Excel文件中所有表格
SS. DeleteSheet(" TestSheet "); // 刪除Excel中TextSheet表格
八、 獲取Excel中總行數、總列數、當前行
int iCols = SS.GetTotalColumns(); // 總列數
int iRows = SS.GetTotalRows(); // 總行數
int iCurRow = SS.GetCurrentRow(); // 當前所在行號
九、 獲取行頭數據
CStringArray rowHeader;
SS.GetFieldNames(rowHeader);
CString tmpStr;
for (int i = 0; i < rowHeader.GetSize(); i++)
{
tmpStr.Format("行號: %d, 列號: %d ,內容: %s\n", 1, i+1, rowHeader.GetAt(i));
tempString += tmpStr;
}
AfxMessageBox(tempString);
最後,如果想知道詳細實現細節的話,可以在下載示例源碼後,仔細查看源碼既可(內有詳細注釋)。
B. excel中的編程和c語言編程是不是一樣有何區別
http://www.7880.com/Info/Article-81c56f80.html
excel的編程:
去看一下這個
另外還有
新術語:「宏」,指一系列EXCEL能夠執行的VBA語句。
以下將要錄制的宏非常簡單,只是改變單元格顏色。請完成如下步驟:
1)打開新工作簿,確認其他工作簿已經關閉。
2)選擇A1單元格。調出「常用」工具欄。
3)選擇「工具」—「宏」—「錄制新宏」。
4)輸入「改變顏色」作為宏名替換默認宏名,單擊確定,注意,此時狀態欄中顯示「錄制」,特別是「停止錄制」工具欄也顯示出來。替換默認宏名主要是便於分別這些宏。
★ 宏名最多可為255個字元,並且必須以字母開始。其中可用的字元包括:字母、數字和下劃線。宏名中不允許出現空格。通常用下劃線代表空格。
5)選擇「格式」的「單元格」,選擇「圖案」選項中的紅色,單擊「確定」。
6)單擊「停止錄制」工具欄按鈕,結束宏錄制過程。
※ 如果「停止錄制」工具欄開始並未出現,請選擇「工具」—「宏」—「停止錄制」。
錄制完一個宏後就可以執行它了。
1.4 執行宏
當執行一個宏時,EXCEL按照宏語句執行的情況就像VBA代碼在對EXCEL進行「遙控」。但VBA的「遙控」不僅能使操作變得簡便,還能使你獲得一些使用EXCEL標准命令所無法實現的功能。而且,一旦熟悉了EXCEL的「遙控」,你都會奇怪自己在沒有這些「遙控」的情況下,到底是怎麼熬過來的。要執行剛才錄制的宏,可以按以下步驟進行:
1)選擇任何一個單元格,比如A3。
2)選擇「工具」—「宏」—「宏」,顯示「宏」對話框。
3)選擇「改變顏色」,選擇「執行」,則A3單元格的顏色變為紅色。試著選擇其它單元格和幾個單元格組成的區域,然後再執行宏,以便加深印象。
1.5 查看錄制的代碼
到底是什麼在控制EXCEL的運行呢?你可能有些疑惑.好,讓我們看看VBA的語句吧.
1)選擇「工具」—「宏」—「宏」,顯示「宏」對話框。
2)單擊列表中的「改變顏色」,選擇「編輯」按鈕。
此時,會打開VBA的編輯器窗口(VBE)。關於該編輯器,以後再詳細說明,先將注意力集中到顯示的代碼上。代碼如下:(日期和姓名會有不同)
Sub 改變顏色()
'
' 改變顏色 Macro
' xw 記錄的宏 2000-6-10
'
'
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
將來會十分熟悉這種代碼,雖然現在它們看上去像一種奇怪的外語。學習VBA或編程語言在某種程度上比較像在學習一種外語。
Sub 改變顏色():這是宏的名稱。
中間的以「 '」開頭的五行稱為「注釋」,它在錄制宏時自動產生。
以With 開頭到End With 結束的結構是With結構語句,這段語句是宏的主要部分。注意單詞「selection」,它代表「突出顯示的區域」(即:選定區域)。With Selection.Interior :它讀作「選擇區域的的內部」.這整段語句設置該區域內部的一些「屬性」
C語言編程是:
優點 (1)繼承了C語言的全部優點。 (2)完全的可視化。 (3)極強的兼容性,支持OWL、VCL和MFC三大類庫。 (4)編譯速度非常快。 缺點 由於推出的時間太短,關於它的各種資料還不太多。 綜述:我認為C++ Builder 是最好的編程工具。它既保持了C語言編程的優點,又做到了完全的可視化。
C. c語言 excel 編程
excel 和access資料庫操作一樣 可以用ado的方式訪問資料庫 可執行增刪改查詢的所有操作
D. C語言函數和EXCEL函數
首先聲明,C語言和Excel完全不是一回事情:C語言是編程(尤其針對硬體有效的),Excel是辦公中的應用軟體(支持VBS或者宏編程)。你所看到的只是重名現象而已。不可當真,不過你不怕混淆可以方便你同時學習的時候記憶。printf:列印輸出到屏幕。scanf:從鍵盤輸入。getchar:獲得一個字元。
E. c語言 excel導入導出
C++、VC、VS、.net里都可通過資料庫連接、捆綁後再調用,前提是你安裝了相應版本的excel服務包(一般安裝Office時都會自動裝好,只是版本別選錯,沒有安裝的,自己找找吧)。
用標准C語言很難,因為excel的格式不固定,要檢測的東西很多,不建議用標C。
F. 怎麼利用c語言創建excel文件
如果數據簡單的話,可以使用CSV(逗號分隔值)格式的文件。CSV格式的文件可以用OfficeExcel 打開。比如有要保存的一張表格是這樣的:
----------------表格開始-------------------
編號 姓名 性別
1 A 男
2 B 女
3 C 男
---------------表格結束--------------------
那麼在保存CSV文件裡面數據格式是這樣的:
----------------內容開始----------------
編號,姓名,性別
1, A, 男
2, B, 女
3, C, 男
----------------內容結束----------------
用Excel打開是這樣的:
下面是示常式序:
#include
struct Student
{
int id;
char name[10];
char gender[3];
};
int main(int argc, char *argv[])
{
// 在程序所在目錄下面,可以看見一個名為 student.csv 的文件
FILE * file=fopen("student.csv","w");
struct Student studens[]=
{
{1,"A","男"},
{2,"B","女"},
{3,"C","男"},
};
int studensAmount=sizeof(studens)/sizeof(struct Student);
int i;
if(file)
{
fprintf(file,"%s%,%s,%s\n","編號","姓名","性別");
for(i=0;i
{
fprintf(file,"%d%,%s,%s\n",studens[i].id,studens[i].name,studens[i].gender);
}
}
fclose(file);
return 0;
}
G. c語言怎麼引用excel的數據
簡單的方法是通過ODBC來實現:
具體實現
一、 包含Excel文件操作類頭文件
#include "CSpreadSheet.h"
二、 新建Excel文件,並寫入默認數據
// 新建Excel文件名及路徑,TestSheet為內部表名
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray sampleArray, testRow;
SS.BeginTransaction();
// 加入標題
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年齡");
SS.AddHeaders(sampleArray);
// 加入數據
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鵬"};
CString strAge[] = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++)
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}
SS.Commit();
三、 讀取Excel文件數據
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Rows, Column;
//清空列表框
m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++)
{
// 讀取一行
SS.ReadRow(Rows, i);
CString strContents = "";
for (int j = 1; j <= Rows.GetSize(); j++)
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents + " --> " + Rows.GetAt(j-1);
}
m_AccessList.AddString(strContents);
}
H. 請問C語言可以在excel中使用嗎
似乎可能不行,但是你可以試一試。(我沒玩過c但是excel似乎只能用vb。)
I. C語言如何操作excel文件
1.寫操作 第一步:單純C語言寫入Excel文件只能是 *.csv的後綴文件(是和txt一樣,以二進制文本形式存儲,它是以都逗號分隔符做個單元格內容的劃分, .xls存儲比較復雜, .csv文件可以可以通過...
2.讀操作 讀取文件 對於讀取Excel文件的操作,使用了文件隨機定位函數fseek(),它的一般調用格式如下: fseek...
3.最新補充 2018.08.28 由於經常有朋友告訴我運行結果是0 ,並將他們的工程發到我...