VC讀寫EXCEL檔案類(已安裝excel)

2021-04-13 03:18:43 字數 3495 閱讀 5376

以下是.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...