vc ++-VC 写excel文件的效率

问题描述

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

vc ++-VC 写excel文件的效率的相关文章

在ASP.NET中使用EXCEL之三 写Excel文件

asp.net|excel   在按钮的click事件中输入如下代码,即可以实现写入Excel文件. 写Excel文件时,还要把项目文件夹的权限进行设置,对iuser_machine用户有可写的权限. private void Button1_Click(object sender, System.EventArgs e)  {string filename="";   Excel.ApplicationClass oExcel;   oExcel = new Excel.Applic

二维数组-C#中如何大幅提高写excel文件的速度?

问题描述 C#中如何大幅提高写excel文件的速度? 输入文件:input.txt包含以[:]号或者[t]制表符分隔的多行(实际在100万行以上)数据,每行数据个数不定. a;b;c 1;2; 1;2;3;4;5 输出文件;output.xlsx a b c 1 2 1 2 3 4 5 问题:写了个小程序处理2000行在10s以内,百万行速度就太慢,无法忍受了.求教一些能显著提高写Excel速度的方法.网上查的先变成二维数组之类的方法,效果不大.百万行在20min以内就好. 解决方案 你完全没有

求助: 关于C# 导出Excel 文件的效率问题

问题描述 做WindowsForms程序有个需求,就是要把一个表的数据导出为Excel文件我用如下的excel=newApplicationClass();Excel.Workbooksworkbooks=excel.Workbooks;workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Sheetssheets=workbook.Worksheets;worksheet=(Excel._Worksheet)shee

Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

以前用jxl.jar包,读写过Excel文件.也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽. 注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一. (2)对于要写入Excel中的数据统计每一列的最大列宽,最后直接将这一列的列宽设置为这个列的最大值即可. 2.实现代码 import java.io.File; import java.util.

Java使用jxl包写Excel文件适合列宽实现_java

注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路(1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一.(2)对于要写入Excel中的数据统计每一列的最大列宽,最后直接将这一列的列宽设置为这个列的最大值即可. 2.实现代码 复制代码 代码如下: import java.io.File;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import jav

vc++-求大神改个程序,改成用文件操作的,我的程序VC++2005 写的

问题描述 求大神改个程序,改成用文件操作的,我的程序VC++2005 写的 #include #include #include using namespace std; typedef struct stu//定义一个结构体作为类的私有成员 { int num; string name; }; class student //学生类为基类 { protected: stu a[100]; int i, n; static int d;//计算输入学生总数 public: student();/

excel表格已经打开了,用VC怎么操作已经打开的excel文件呢?

问题描述 excel表格已经打开了,我想用VC去操作excel,比如说想在A1单元格填上1.我看网上的都是用createdispatch("excel.application")这样去打开一个excel表格,但对于已经打开的表格没有介绍.关键就是怎么找到那个打开的表格,通过句柄或者文件的名字,注意是VC,不是VB.总之一句话.已经打开的EXCEL表格,用VC怎么去操作.谁知道呀,最好能给个例子.谢谢呀! 解决方案 解决方案二:http://bbs.csdn.net/topics/390

导入-Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死!

问题描述 Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死! 项目是进行单机版和网络版的数据对比,需要将单机版导出来的数据(excel表格,固定格式)导入网络版进行对比,网络版在导入数据时能提示选择导入的excel文件,不用在Java代码中将要读取数据的excel表格的目录写死.谢谢您的帮助! 解决方案 JAVA读取EXCEL用的比较多的是POI类库,参考Java对Excel(0307)进行上传.解析.验证.入库,或者你搜索一下java poi,有很多文章的

stream-读取excel文件的参数怎么写

问题描述 读取excel文件的参数怎么写 /// RenderDataTableFromExcel:来自excel文件 ExcelFileStream:文件流 SheetIndex 工作区 HeaderRowIndex 行头 public static DataTable RenderFromExcel(Stream excelFileStream, int sheetIndex, int headerRowIndex) 我想调用RenderFromExcel这个函数 但是我不知道具体的参数应该