以下是.h檔案
#pragma once
class creadwriteexcel
;//以下是.cpp檔案
#include "stdafx.h"
#include "readwriteexcel.h"
if(failed(hr))
cstring strname; //excel表完整路徑
cstring strtmp; //臨時變數,儲存單元格資料中的cstring型
double dbltmp; //臨時變數,儲存單元格資料中的double型
//用來儲存資訊的陣列
variant arr;
arr.vt = vt_array | vt_variant;
safearraybound sab[2];
sab[0].llbound = 1; sab[0].celements = row;
sab[1].llbound = 1; sab[1].celements = col;
arr.parray = safearraycreate(vt_variant, 2, sab);
int tablenum=0;
int ncount=1;
strname=strfilename;
// 呼叫workbooks.open()方法,開啟乙個已經存在的workbook
idispatch *pxlbook;
// 登出com庫
couninitialize();
return col;
}//**********************//
// autowrap 函式的正體
// 先宣告:這個函式不是偶寫的
// autowrap() - automation helper function...
hresult creadwriteexcel::autowrap(int autotype, variant *pvresult, idispatch *pdisp, lpolestr ptname, int cargs...)
// variables used...
dispparams dp = ;
dispid dispidnamed = dispid_propertyput;
dispid dispid;
hresult hr;
char buf[200];
char szname[200];
// convert down to ansi
widechartomultibyte(cp_acp, 0, ptname, -1, szname, 256, null, null);
// get dispid for name passed...
hr = pdisp->getidsofnames(iid_null, &ptname, 1, locale_user_default, &dispid);
if(failed(hr))
// allocate memory for arguments...
variant *pargs = new variant[cargs+1];
// extract arguments...
for(int i=0; iinvoke(dispid, iid_null, locale_system_default, autotype, &dp, pvresult, null, null);
if(failed(hr))
// end variable-argument section...
va_end(marker);
delete pargs;
return hr;
}//1、判斷字串是否是可輸入字元
//2、判斷字串是否是合法順序
//3、將字元和數字分開
//4、獲取數字部分的值
//如a123
bool creadwriteexcel::checkstring(cstring str,cstring &sleft,cstring &sright,long &nright)
//數字部分檢查
for(int i=0;i2)
return false;
//第乙個數字如果是字元
if(sallowstr.find(sright[0])==0)
return false;
//將字串轉成long
nright=cstringtolong(sright);
return true;
}//將字串轉成long
long creadwriteexcel::cstringtolong(cstring sstr)
//根據表頭字母串差,計算表頭長度
//如:aa bb
int creadwriteexcel::getcolumnwidth(cstring sa,cstring sb)
if(failed(hr))
//用來儲存資訊的陣列
variant arr;
arr.vt = vt_array | vt_variant;
safearraybound sab[2];
sab[0].llbound = 1; sab[0].celements = row;
sab[1].llbound = 1; sab[1].celements = col;
arr.parray = safearraycreate(vt_variant, 2, sab);
cstring strtmp;
for(i=0; iint tablenum=0;
int ncount=1;
cstring strname; //excel表完整路徑
strname=strfilename;
// 呼叫workbooks.open()方法,開啟乙個已經存在的workbook
idispatch *pxlbook;
cstring strrange,sbegincell,sendcell;
sendcell.format(_t("%d"),row);
sbegincell=_t("a1");
tchar c1,c2;
#ifndef unicode
c1='a';
c2='';
#else
c1=l'a';
c2=l'';
#endif
if(row>26)
sendcell=c2+sendcell;
sendcell=c1+sendcell;
strrange=sbegincell+_t(":")+sendcell;
tchar* crange=strrange.getbuffer();
// 選擇乙個colxrow大小的range
idispatch *pxlrange;
// 登出com庫
//couninitialize();
return col;
}
VC讀寫Excel 速度問題
上篇文章 vc讀寫excel mfc讀寫excel 考資料 中的考勤資料處理軟體當excel行數多的時候效率特別地,跟蹤一下發現 時間主要花費在cspreadsheet類的addrow 方法中。通過odbc來平凡的寫excel資料的時候都會出現這樣的問題,資料行數少的時候還可以接受,當行數多 303...
Excel檔案讀寫
對於c s模式的開發,讀寫excel檔案是很經常的事情,這裡我介紹一下通過oledb方式對excel檔案進行讀寫的方法,相比通過操作單元格的方式,應該在效能和效率上有很大優勢。首先 提供乙個excel檔案操作引擎類。using system using system.data using syste...
讀寫Excel檔案
先要引用這些命名空間.不明白的地方可以在msdn中找到.using system.data.oledb using excel using system.reflection for missing.value and bindingflags 讀取excel excel檔案全名 放到dataset...