c怎樣讀取excel數據
『壹』 如何用c語言提取excel中的數據
1.方法一:採用OleDB讀取EXCEL文件:
把EXCEL文件當做一個數據源來進行數據的讀取操作,實例如下:
publicDataSetExcelToDS(stringPath)
{
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+Path+";"+"ExtendedProperties=Excel8.0;";
OleDbConnectionconn=newOleDbConnection(strConn);
conn.Open();
stringstrExcel="";
OleDbDataAdaptermyCommand=null;
DataSetds=null;
strExcel="select*from[sheet1$]";
myCommand=newOleDbDataAdapter(strExcel,strConn);
ds=newDataSet();
myCommand.Fill(ds,"table1");
returnds;
}
對於EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+Path+";"+"ExtendedProperties=Excel8.0;";
OleDbConnectionconn=newOleDbConnection(strConn);
DataTableschemaTable=objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
stringtableName=schemaTable.Rows[0][2].ToString().Trim();
另外:也可進行寫入EXCEL文件,實例如下:
publicvoidDSToExcel(stringPath,DataSetoldds)
{
//先得到匯總EXCEL的DataSet主要目的是獲得EXCEL在DataSet中的結構
stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+path1+";ExtendedProperties=Excel8.0";
OleDbConnectionmyConn=newOleDbConnection(strCon);
stringstrCom="select*from[Sheet1$]";
myConn.Open();
OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);
ystem.Data.OleDb.OleDbCommandBuilderbuilder=newOleDbCommandBuilder(myCommand);
//QuotePrefix和QuoteSuffix主要是對builder生成InsertComment命令時使用。
builder.QuotePrefix="[";//獲取insert語句中保留字元(起始位置)
builder.QuoteSuffix="]";//獲取insert語句中保留字元(結束位置)
DataSetnewds=newDataSet();
myCommand.Fill(newds,"Table1");
for(inti=0;i<oldds.Tables[0].Rows.Count;i++)
{
在使用ImportRow後newds內有值,但不能更新到Excel中因為所有導入行的
DataRowState!=Added
DataRownrow=aDataSet.Tables["Table1"].NewRow();
for(intj=0;j<newds.Tables[0].Columns.Count;j++)
{
nrow[j]=oldds.Tables[0].Rows[i][j];
}
newds.Tables["Table1"].Rows.Add(nrow);
}
myCommand.Update(newds,"Table1");
myConn.Close();
}
2.方法二:引用的com組件:Microsoft.Office.Interop.Excel.dll讀取EXCEL文件
首先是Excel.dll的獲取,將Office安裝目錄下的Excel.exe文件Copy到DotNet的bin目錄下,cmd到該目錄下,運行TlbImpEXCEL.EXEExcel.dll得到Dll文件。再在項目中添加引用該dll文件.
//讀取EXCEL的方法(用范圍區域讀取數據)
privatevoidOpenExcel(stringstrFileName)
{
objectmissing=System.Reflection.Missing.Value;
Applicationexcel=newApplication();//lauchexcelapplication
if(excel==null)
{
Response.Write("<script>alert('Can'taccessexcel')</script>");
}
else
{
excel.Visible=false;excel.UserControl=true;
//以只讀的形式打開EXCEL文件
Workbookwb=excel.Application.Workbooks.Open(strFileName,missing,true,missing,missing,missing,
missing,missing,missing,true,missing,missing,missing,missing,missing);
//取得第一個工作薄
Worksheetws=(Worksheet)wb.Worksheets.get_Item(1);
//取得總記錄行數(包括標題列)
introwsint=ws.UsedRange.Cells.Rows.Count;//得到行數
//intcolumnsint=mySheet.UsedRange.Cells.Columns.Count;//得到列數
//取得數據范圍區域(不包括標題列)
Rangerng1=ws.Cells.get_Range("B2","B"+rowsint);//item
Rangerng2=ws.Cells.get_Range("K2","K"+rowsint);//Customer
object[,]arryItem=(object[,])rng1.Value2;//getrange'svalue
object[,]arryCus=(object[,])rng2.Value2;
//將新值賦給一個數組
string[,]arry=newstring[rowsint-1,2];
for(inti=1;i<=rowsint-1;i++)
{
//Item_Code列
arry[i-1,0]=arryItem[i,1].ToString();
//Customer_Name列
arry[i-1,1]=arryCus[i,1].ToString();
}
Response.Write(arry[0,0]+"/"+arry[0,1]+"#"+arry[rowsint-2,0]+"/"+arry[rowsint-2,1]);
}
excel.Quit();excel=null;
Process[]procs=Process.GetProcessesByName("excel");
foreach(Processproinprocs)
{
pro.Kill();//沒有更好的方法,只有殺掉進程
}
GC.Collect();
}
3.方法三:將EXCEL文件轉化成CSV(逗號分隔)的文件,用文件流讀取(等價就是讀取一個txt文本文件)。
先引用命名空間:usingSystem.Text;和usingSystem.IO;
FileStreamfs=newFileStream("d:\Customer.csv",FileMode.Open,FileAccess.Read,FileShare.None);
StreamReadersr=newStreamReader(fs,System.Text.Encoding.GetEncoding(936));
stringstr="";
strings=Console.ReadLine();
while(str!=null)
{str=sr.ReadLine();
string[]xu=newString[2];
xu=str.Split(',');
stringser=xu[0];
stringdse=xu[1];if(ser==s)
{Console.WriteLine(dse);break;
}
}sr.Close();
另外也可以將資料庫數據導入到一個txt文件,實例如下:
//txt文件名
stringfn=DateTime.Now.ToString("yyyyMMddHHmmss")+"-"+"PO014"+".txt";
OleDbConnectioncon=newOleDbConnection(conStr);
con.Open();
stringsql="selectITEM,REQD_DATE,QTY,PUR_FLG,PO_NUMfromTSD_PO014";
//OleDbCommandmycom=newOleDbCommand("select*fromTSD_PO014",mycon);
//OleDbDataReadermyreader=mycom.ExecuteReader();//也可以用Reader讀取數據
DataSetds=newDataSet();
OleDbDataAdapteroda=newOleDbDataAdapter(sql,con);
oda.Fill(ds,"PO014");
DataTabledt=ds.Tables[0];
FileStreamfs=newFileStream(Server.MapPath("download/"+fn),FileMode.Create,FileAccess.ReadWrite);
StreamWriterstrmWriter=newStreamWriter(fs);//存入到文本文件中
//把標題寫入.txt文件中
//for(inti=0;i<dt.Columns.Count;i++)
//{
//strmWriter.Write(dt.Columns[i].ColumnName+"");
//}
foreach(DataRowdrindt.Rows)
{
stringstr0,str1,str2,str3;
stringstr="|";//數據用"|"分隔開
str0=dr[0].ToString();
str1=dr[1].ToString();
str2=dr[2].ToString();
str3=dr[3].ToString();
str4=dr[4].ToString().Trim();
strmWriter.Write(str0);
strmWriter.Write(str);
strmWriter.Write(str1);
strmWriter.Write(str);
strmWriter.Write(str2);
strmWriter.Write(str);
strmWriter.Write(str3);
strmWriter.WriteLine();//換行
}
strmWriter.Flush();
strmWriter.Close();
if(con.State==ConnectionState.Open)
{
con.Close();
}
『貳』 怎麼用C/C++語言讀取excel文件的某一行某一列
曾用C++ Builder 寫過EXCEL操作。
一般有兩種方法:
1,用ADO連續EXCEL資料庫,這種方式,操作可用SQL來操作。
2,用OLE方式,這種方式可以達到EXCEL中大部分的功能和操作。
以下供參考:
/************* 1--- ADO *************/
//.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ADODB.hpp>
#include <DB.hpp>
#include <DBGrids.hpp>
#include <Dialogs.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *btnOpen;
TButton *btnExit;
TOpenDialog *OpenDialog1;
TButton *btnEx;
TDataSource *DataSource1;
TADOConnection *ADOConnection1;
TADOQuery *ADOQuery1;
TDBGrid *DBGrid1;
void __fastcall btnExClick(TObject *Sender);
void __fastcall btnOpenClick(TObject *Sender);
void __fastcall btnExitClick(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DBGrid1->DataSource = DataSource1;
DataSource1->DataSet = ADOQuery1;
ADOQuery1->Connection = ADOConnection1;
ADOConnection1->LoginPrompt = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnExClick(TObject *Sender)
{
if(ADOQuery1->Active && ADOQuery1->RecordCount>0 )
{
int col;
AnsiString s;
FILE *fp;
fp = fopen("c:\\out.txt","w+t");
if(fp==NULL)
{
Application->MessageBox("導出文件建立失敗","提示");
return ;
}
col = ADOQuery1->Fields->Count;
ADOQuery1->First();
while(!ADOQuery1->Eof)
{
s = "";
for(int i=0;i<col;i++)
s += ADOQuery1->Fields->Fields[i]->AsString +"\t";
fprintf(fp,"%s\n",s.c_str());
ADOQuery1->Next();
}
fclose(fp);
}
else
{
Application->MessageBox("沒有需要導出的記錄,請重新打開XLS文件","提示");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
AnsiString sFile="";
AnsiString sCon;
if(OpenDialog1->Execute())
{
sFile = OpenDialog1->FileName;
/*
sCon = AnsiString("Driver={Microsoft Excel Driver (*.xls)};DBQ=")
+ sFile +"; ";
*/
sCon = AnsiString("Provider=MSDASQL.1;Persist Security Info=False;Extended Properties='DSN=Excel Files;DBQ=")
+ sFile +"'; ";
}
try
{
if(sFile!="")
{
ADOConnection1->Connected = False;
ADOConnection1->ConnectionString = sCon;
ADOConnection1->Connected = True;
}
}
catch(...)
{
Application->MessageBox("連接XLS失敗","提示");
return ;
}
if(ADOConnection1->Connected)
{
AnsiString sSQL = "Select * from [Sheet1$]";
ADOQuery1->SQL->Text = sSQL;
ADOQuery1->Active = True;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
/************* 2-- OLE *************/
C++ Builder把Excel自動化對象的功能包裝在下面的四個Ole Object Class函數中,應用人員可以很方便地進行調用。
設置對象屬性:void OlePropertySet(屬性名,參數……);
獲得對象屬性:Variant OlePropertyGet(屬性名,參數……);
調用對象方法:1) Variant OleFunction(函數名,參數……);
2) void OleProcere(過程名,參數……);
在程序中可以用宏定義來節省時間:
#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcere
舉例:
ExcelApp.OlePropertyGet("workbooks").OleFunction("Add");
可寫為
ExcelApp.PG("workbooks").FN("Add");
C++ Builder中使用OLE控制Excel2000,必須掌握Excel2000的自動化對象及Microsoft Word Visual Basic幫助文件中的關於Excel的對象、方法和屬性。對象是一個Excel元素,屬性是對象的一個特性或操作的一個方面,方法是對象可以進行的動作。
首先定義以下幾個變數:
Variant ExcelApp,Workbook1,Sheet1,Range1;
1、Excel中常用的對象是:Application,Workbooks,Worksheets等。
★創建應用對象★
Variant ExcelApp;
ExcelApp = Variant::CreateObject ("Excel.Application");
或者
ExcelApp = CreateOleObject ("Excel.Application");
★創建工作簿對象★
Variant WorkBook1;
WorkBook1 = ExcelApp.PG("ActiveWorkBook");
★創建工作表對象★
Variant Sheet1;
Sheet1 = WorkBook1.PG("ActiveSheet");
★創建區域對象★
Variant Range;
Range = Sheet1.PG("Range","A1:A10");
或者使用
Excel.Exec(PropertyGet("Range")<<"A1:C1").Exec(Procere("Select"));
2、常用的屬性操作:
★使Excel程序不可見★
ExcelApp.PS("Visible", (Variant)false);
★新建EXCEL文件★
◎ 新建系統模板的工作簿
ExcelApp.PG("workbooks").FN("Add") //默認工作簿
ExcelApp.PG("workbooks").FN("Add", 1) //單工作表
ExcelApp.PG("workbooks").FN("Add", 2) //圖表
ExcelApp.PG("workbooks").FN("Add", 3) //宏表
ExcelApp.PG("workbooks").FN("Add", 4) //國際通用宏表
ExcelApp.PG("workbooks").FN("Add", 5) //與默認的相同
ExcelApp.PG("workbooks").FN("Add", 6) //工作簿且只有一個表
或者使用ExcelApp的Exec方法
Excel.Exec(PropertyGet("Workbooks")).Exec(Procere("Add"));
◎ 新建自己創建的模板的工作簿
ExcelApp.PG("workbooks").FN("Add", "C:\\Temp\\result.xlt");
★打開工作簿★
ExcelApp.PG("workbooks").FN("open", "路徑名.xls")
★保存工作簿★
WorkBook1.FN("Save"); //保存工作簿
WorkBook1.FN("SaveAs", "文件名");//工作簿保存為,路徑注意用"\\"
★退出EXCEL★
ExcelApp.FN ("Quit");
ExcelApp = Unassigned;
或者
ExcelApp.Exec(Procere("Quit"));
★操作工作表★
◎ 選擇選擇工作表中第一個工作表
Workbook1.PG("Sheets", 1).PR("Select");
Sheet1 = Workbook1.PG("ActiveSheet");
◎ 重命名工作表
Sheet1.PS("Name", "Sheet的新名字");
◎ 當前工作簿中的工作表總數
int nSheetCount=Workbook1.PG("Sheets").PG("Count");
★操作行和列★
◎ 獲取當前工作表中有多少行和多少列:
Sheet1.PG("UsedRange").PG("Columns").PG("Count"); //列數
Sheet1.PG("UsedRange").PG("Rows").PG("Count"); //行數
◎ 設置列寬
ExcelApp.PG("Columns", 1).PS("ColumnWidth", 22);
或者
Range = ExcelApp.PG("Cells", 1, 3);
Range.PS("ColumnWidth", 22);
◎ 設置行高
ExcelApp.PG("Rows", 2).PS("RowHeight", 25);
或者
Range = ExcelApp.PG("Cells", 2, 1);
Range.PS("RowHeight", 25);
◎ 在工作表最前面插入一行
Sheet1.PG("Rows", 1).PR("Insert");
◎ 刪除一行
ExcelApp.PG("Rows", 2).PR("Delete"); //將第2行刪除
// 本文作者:ccrun ,如轉載請保證本文檔的完整性,並註明出處。
// 歡迎光臨 C++ Builder 研究 www.ccrun.com
// 摘自:http://www.ccrun.com/doc/go.asp?id=529
★操作單元格★
◎ 設置單元格字體
Sheet1.PG("Cells", 1, 1).PG("Font").PS("Name", "隸書"); //字體
Sheet1.PG("Cells", 2, 3).PG("Font").PS("size", 28); //大小
◎ 設置所選區域字體
Range.PG("Cells").PG("Font").PS("Size", 28);
// 本文轉自 C++Builder研究 - http://www.ccrun.com/article.asp?i=529&d=0iezy5
Range.PG("Cells").PG("Font").PS("Color", RGB(0, 0, 255));
其中參數的設置:
Font Name : "隸書" //字體名稱
Size : 12 //字體大小
Color : RGB(*,*,*) //顏色
Underline : true/false //下劃線
Italic: true/false //斜體
◎ 設置單元格格式為小數百分比
Sheet1.PG("Cells", 1, 1).PS("NumberFormatLocal", "0.00%");
◎ 設定單元格的垂直對齊方式
Range = ExcelApp.PG("Cells", 3, 4);
// 1=靠上 2=居中 3=靠下對齊 4=兩端對齊 5=分散對齊
Range.PS("VerticalAlignment", 2);
◎ 設定單元格的文本為自動換行
Range = ExcelApp.PG("Cells", 3, 4);
Range.PS("WrapText", true);
★單元格的合並★
◎ Range = Sheet1.PG("Range", "A1:A2"); //A1和A2單元格合並
String strRange = "A" + IntToStr(j) + ":" + "C" + IntToStr(j); //比如:A1:C5
Range1=Sheet1.PG("Range", strRange.c_str()); //可以用變數控制單元格合並
Range1.FN("Merge", false);
★讀寫單元格★
◎ 指定單元格賦值
String strValue = "abcdefg";
Sheet1.PG("Cells", 3, 6).PS("Value", strValue.c_str());
Sheet1.PG("Cells", j, 1).PS("Value", "總記錄:" + String(j-6));
或者使用
Excel.Exec(PropertyGet("Cells")<<1<<3).Exec(PropertySet("Value")<<15);
◎ 所選區域單元格賦值
Range.PG("Cells").PS("Value", 10);
◎ 所選區域行賦值
Range.PG("Rows",1).PS("Value", 1234);
◎ 工作表列賦值
Sheet1.PG("Columns",1).PS("Value", 1234);
◎ 讀取取值語句:
String strValue = Sheet1.PG("Cells", 3, 5).PG("Value");
『叄』 如何用C語言實現讀取excel文件中的數據呢
基本思路
基礎實現方法同上篇文章《直接通過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);
最後,如果想知道詳細實現細節的話,可以在下載示例源碼後,仔細查看源碼既可(內有詳細注釋)。
『肆』 在C語言中,如何將EXCEL或者文檔中的數據讀入程序中
1 使用的命名空間為:using System.Data.OleDb;
2 連接資料庫的字元串為:
string myConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\
目錄.xls;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"";
*.xsl可以認為是資料庫了,HDR表示是否隱藏excel的第一行(因為第一行一般表示欄位名稱)
IMEX 參數,因為不同的模式代表著不同的讀寫行為:當IMEX=0 時為「匯出模式」,這個模式開啟的 Excel 檔案只能用來做「寫入」用途。
當 IMEX=1 時為「匯入模式」,這個模式開啟的 Excel 檔案只能用來做「讀取」用途。當 IMEX=2 時為「連結模式」,這個模式開啟的 Excel 檔案可同時支援「讀取」與「寫入」用途。
3.OleDbConnection myConnection = new OleDbConnection(myConn);
4.string mySQLstr = "SELECT f1,f2,f5 FROM [Sheet1$]";
//[Sheet1$]就是表格了,選取第1,2,5列,用Fn表示第n列5 OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(mySQLstr, myConnection);6 DataSet myDS = new DataSet();7 myDataAdapter.Fill(myDS, "[Sheet1$]");
//原理都跟讀取sql是一樣
DataTable dt = myConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
//把相關信息記錄到datatable中
string tbname = dt.Rows[0][2].ToString().Trim();
//讀取表名信息【注意】由於excel每個單元格內數據默認的格式為:varchar(255),因此讀取超過255的單元格內容是需要修改注冊表,這里提供修改方法:Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]"TypeGuessRows"="0"表示從前TypeGuessRows行判斷數據的類型。
『伍』 C語言中如何導入excel的數據
首先得把引用里將excel模塊引用上
然後定義數組
將excel作為對象打開
對數組賦值
比如a(i,j)=cells(i,j)
『陸』 如何用C語言來讀取EXCEL文件中的數據
自己去讀Excel文件我估計幾乎是不可能的,可以藉助Excel提供的資料庫驅動程序以資料庫的形式去訪問,但用純C語言穿靴戴帽的代碼較多,用C++估計簡便點,網上很容易搜到。
『柒』 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);
}