當前位置:編程學習大全網 - 源碼下載 - 利用VC的數據庫類操作Excel文件

利用VC的數據庫類操作Excel文件

Excel表格文件操作的編程實現

編譯:徐景洲

下載本文的示例源代碼。

簡介

通過本文及支持示例源代碼,可以更加靈活地控制Excel表格文件,包括創建新的Excel文件、寫入表格數據、讀取表格數據(包括準確讀取原Excel文件手動添加的行和列數據)、刪除已有的Excel表格、查詢、插入和替換表格中指定的行、列和單元格,以及將生成的Excel文件轉換為指定分隔符分隔的其他文本格式的文件。以下是用VC6編寫的示例程序的運行效果:

基本想法

基本實現方法和上壹篇文章“直接通過ODBC讀寫Excel電子表格文件”壹樣,都是使用ODBC讀寫Excel電子表格文件作為數據庫文件,所以Excel電子表格文件中寫入的行頭名稱必須是唯壹的(不要重名,相當於數據庫中的ID值)。本文將Excel文件的操作封裝在壹個類CSpreadSheet中,通過這個類我們可以很方便地實現各種Excel表格數據操作,並且可以擴展這個類來滿足自己的需求。

具體實現

壹、包括Excel文件操作類的頭文件

#包含" CSpreadSheet.h "

2.創建壹個新的Excel文件並寫入默認數據。//創建新的Excel文件名和路徑,TestSheet是內部表的名稱。

CSpreadSheet SS("c:\\Test.xls "," test sheet ");

CStringArray sampleArray,testRow

黨衛軍。begin transaction();

//添加標題

樣品陣列。remove all();

樣品陣列。添加(“名稱”);

樣品陣列。Add(“年齡”);

黨衛軍。add headers(sample array);

//添加數據

CString strName[] = { "徐景洲"、"徐智慧"、"郭輝"、"牛英俊"、"朱曉鵬" };

CString strAge[] = {"27 "," 23 "," 28 "," 27 "," 26 " };

for(int I = 0;我& ltsizeof(strName)/sizeof(CString);i++)

{

樣品陣列。remove all();

樣品陣列。add(strName[I]);

樣品陣列。add(strAge[I]);

黨衛軍。AddRow(sample array);

}

黨衛軍。commit();

三、讀取Excel文件數據cspreadsheetss(" C:\ \ test . xls ","測試表");

CStringArray行,列。

//清空列表框

m_AccessList。reset content();

for(int I = 1;我& lt= SS。GetTotalRows();i++)

{

//讀取壹行

黨衛軍。ReadRow(Rows,I);

CString strContents =

for(int j = 1;j & lt=行。GetSize();j++)

{

如果(j == 1)

strContents = Rows。GetAt(j-1);

其他

strContents = strContents + " ->+行。GetAt(j-1);

}

m_AccessList。AddString(str contents);

}

4.添加、插入、替換已有的Excel表格數據//初始化測試行數據,演示添加、插入、替換數據的操作。

for(int k = 1;k & lt= 2;k++)

{

testRow。add(" Test ");

}

黨衛軍。AddRow(testRow);//添加到尾部

黨衛軍。AddRow(testRow,2);//在第二行插入壹個新行

黨衛軍。AddRow(testRow,6,true);//用新內容替換原來的第四行。

黨衛軍。AddCell("徐景洲",1,2);//添加(不存在)或替換(存在)第二行第壹列的單元格內容

黨衛軍。commit();

5.查詢行、列、單元格中已有的Excel表格數據void CExcelAccessDlg::OnQuery()。

{

CSpreadSheet SS("c:\\Test.xls "," test sheet ");

CStringArray行,列。

CString tempString =

update data();

if(m _ strRow = = " " & amp;& ampM_strColumn == "") //查詢為空。

{

AfxMessageBox("行號和列號不能同時為空!");

返回;

}

else if(m _ strRow = = " " & amp;& ampm_strColumn!= " ")//查詢指定的列數據

{

int I column = atoi(m _ str column);

int iCols = SS。GetTotalColumns();

if(I column & gt;ICols) //超出表範圍查詢時

{

CString字符串;

海峽。Format("表中總列數為:%d,",iCols);

AfxMessageBox(str+"查詢列數大於Excel表格的總列數,請重新輸入!");

返回;

}

//讀取壹列數據,按行讀出。

如果(!黨衛軍。ReadColumn(Column,iColumn))

{

AfxMessageBox(不銹鋼。GetLastError());

返回;

}

CString tmpStr

for(int I = 0;我& lt專欄。GetSize();i++)

{

TmpStr。Format("行號:%d,列號:%d,內容:% s \ n ",I+1,I列,column . getat(I));

tempString+= tmp str;

}

AfxMessageBox(tempString);

}

else if(m_strRow!= " " & amp& ampM_strColumn == "") //查詢指定行數的數據。

{

int iRow = atoi(m _ strRow);

int iRows = SS。GetTotalRows();

if(iRow & gt;IRows) //超出表範圍查詢時

{

CString字符串;

海峽。Format("表中的總行數是:%d,",I rows);

AfxMessageBox(str+"查詢行數大於Excel表格的總行數,請重新輸入!");

返回;

}

//讀取指定的行數據

如果(!黨衛軍。ReadRow(Rows,iRow))

{

AfxMessageBox(不銹鋼。GetLastError());

返回;

}

CString tmpStr

for(int I = 0;我& lt行。GetSize();i++)

{

TmpStr。Format("行號:%d,列號:%d,內容:% s \ n ",arrow,I+1,rows . getat(I));

tempString+= tmp str;

}

AfxMessageBox(tempString);

}

else if(m_strRow!= " " & amp& ampm_strColumn!= " ")//查詢指定的單元格數據

{

int iRow = atoi(m_strRow),I column = atoi(m _ str column);

int iRows = SS。GetTotalRows(),iCols = SS。GetTotalColumns();

if(I column & gt;ICols) //超出表範圍查詢時

{

CString字符串;

海峽。Format("表中總列數為:%d,",iCols);

AfxMessageBox(str+"查詢列數大於Excel表格的總列數,請重新輸入!");

返回;

}

else if(iRow & gt;iRows)

{

CString字符串;

海峽。Format("表中的總行數是:%d,",I rows);

AfxMessageBox(str+"查詢行數大於Excel表格的總行數,請重新輸入!");

返回;

}

//讀取指定行和列的單元格數據。

如果(!黨衛軍。ReadCell(tempString,iColumn,iRow))

{

AfxMessageBox(不銹鋼。GetLastError());

返回;

}

CString字符串;

海峽。Format("行號:%d,列號:%d,內容:%s ",iRow,iColumn,tempString);

AfxMessageBox(str);

}

}

6.將現有的Excel轉換保存為指定的分隔文本文件//將原始Excel文件轉換為分號分隔的文本,並以相同的名稱保存為文本文件。

黨衛軍。轉換(";");

七、刪除表SS。在Excel中刪除工作表();//刪除Excel文件中的所有表格。

黨衛軍。delete sheet(" test sheet ");//刪除Excel中的TextSheet表。

八、在Excel中獲取行、列和當前行的總數inti ols = ss . gettotalcolumns();//總列數

int iRows = SS。GetTotalRows();//總行數

int iCurRow = SS。GetCurrentRow();//當前行號

9、獲取行頭數據cstringarrerowheader

黨衛軍。getfield names(row header);

CString tmpStr

for(int I = 0;我& lt行標題。GetSize();i++)

{

TmpStr。Format("行號:%d,列號:%d,內容:% s \ n ",1,I+1,row header . getat(I));

tempString+= tmp str;

}

AfxMessageBox(tempString);

最後,如果想了解詳細的實現細節,可以在下載完示例源代碼(有詳細註釋)後仔細查看源代碼。

參考資料:

直接通過ODBC讀寫Excel表格文件-徐景洲(譯)

壹個讀寫Excel和文本分隔的電子表格的類

  • 上一篇:如何看委比
  • 下一篇:煙花png圖片-誰有奧運會PS過搞笑圖片,我就看過壹張菲爾普斯動態的圖片
  • copyright 2024編程學習大全網