问题描述
- VC 写excel文件的效率
- 比如使用ole ,basicExcel ,或者其他方法,写1M需要使用的时间,其中,写了多少行,多少列
我使用basicExcel 写了1M的数据一万行,6列,保存数据阶段花费了2.4s,计算机环境:window xp 512M,内存40G的虚拟机中执行的。在讲exe文件放到win8 系统时需要10s使用ole 调用测试居然用了17s
代码引用:http://www.cnblogs.com/yaowen/archive/2013/01/22/2870762.html
CString strFile;
strFile.Format(""%s""F:GeorgestudyingcodeoleExceloleExcelexcel.xlsx"");
COleVariant covTrue((short)TRUE) covFalse((short)FALSE) covOptional((long)DISP_E_PARAMNOTFOUND VT_ERROR);CApplication app;CWorkbook book;CWorkbooks books;CWorksheet sheet;CWorksheets sheets;CRange range;CFont font;if (!app.CreateDispatch(_T(""Excel.Application""))){ MessageBox(_T(""Error!Creat Excel Application Server Faile!""));}books = app.get_Workbooks();//books.AttachDispatch(app.get_Workbooks());可代替上面一行book = books.Add(covOptional);//book.AttachDispatch(books.Add(covOptional)true); 可代替上面一行sheets=book.get_Worksheets();//sheets.AttachDispatch(book.get_Worksheets()true); 可代替上面一行sheet = sheets.get_Item(COleVariant((short)1));//sheet.AttachDispatch(sheets.get_Item(_variant_t(""sheet1""))true); 可代替上面一行//下面两行,是向A1中写入""Yeah!I can write data to excel!""clock_t timeS =clock();range = sheet.get_Range(COleVariant(_T(""A1""))COleVariant(_T(""A1""))); //range.put_Value2(COleVariant(_T(""Yeah!I can write data to excel!"")));//下面是向第二行的前十个单元格中输入1到10,十个数字for(long j=10;j<10000;j++) for(long i=1;i<11;i++) range.put_Item(_variant_t((long)j)_variant_t((long)i)_variant_t((long)i));//设置列宽range = sheet.get_Range(COleVariant(_T(""A1""))COleVariant(_T(""J1"")));range.put_ColumnWidth(_variant_t((long)5));//显示表格//app.put_Visible(TRUE);//保存book.SaveCopyAs(COleVariant(strFile)); book.put_Saved(true);int t = (int)(clock() - timeS);CString T;T.Format(""%d ms""t);this->MessageBox(T);//结尾,释放
有朋友做过测试没,可以说下为啥用时这么多吗?
解决方案
你说的ole,应该是指调用vba写excel,这个和你excel的版本,以及系统环境都有关。要想快,可以用 npoi 等原生的库,而不要用 vba,vba需要在进程外启动一个 excel,效率不可能高。
解决方案二:
vc automation 写excel文件
vc automation 写excel文件
VC中操作EXCEL文件
时间: 2024-11-03 04:17:57