Excel写入慢的问题

nokia_n99 2009-05-25 10:50:51
我现在的方式是一个一个单元格写,有没有写一行的代码,帮我贴出来,谢谢。

...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DavidHsing 2009-05-31
  • 打赏
  • 举报
回复
嗯,那个是一个叫 Yap Chun Wei 的新加坡人在 2001 年写的
可惜只支持 String,很多其他的功能都不支持,所以他后来才新写 BasicExcel。
biweilun 2009-05-31
  • 打赏
  • 举报
回复
ls说的

CSpreadSheet
A Class to Read and Write to Excel and Text Delimited Spreadsheet
http://www.codeproject.com/KB/database/cspreadsheet.aspx
注意:这个也是采用 ADO/ODBC 的方式,但是封装了一下,可以直接 CStringArray 赋整行值。

不错.我用过
DavidHsing 2009-05-31
  • 打赏
  • 举报
回复
没办法,lz,常规 ADO/ODBC 的方式就是这样,慢!
用 OLE 自动化吧,由于是隐藏启动 Excel,虽然功能强,但是更慢。

所以要快,就要自己解析 Excel 格式,直接从文件下手,而且这样不依赖于 Office 是否安装。
给你个地址:

CSpreadSheet
A Class to Read and Write to Excel and Text Delimited Spreadsheet
http://www.codeproject.com/KB/database/cspreadsheet.aspx
注意:这个也是采用 ADO/ODBC 的方式,但是封装了一下,可以直接 CStringArray 赋整行值。

另外 CodeProject 上推荐的是
BasicExcel
A Class to Read and Write to Microsoft Excel
http://www.codeproject.com/KB/office/BasicExcel.aspx
这个就是直接解析文件的,推荐给你。


是同一作者先后写的。
jiancaiwang 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 purple2727 的回复:]
可以把Excel当成一个数据库,每次只需要插入一行就可以了!

void COdbcExcelDlg::WriteToExcel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = ".\\demo.xls";// 要建立的Excel文件
CString sSql;

TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s", …
[/Quote]

我也一直在使用这种利用odbc数据库连接方法,但是在数据量超过几十K的时候,这种写入Excel会很慢。后来没办法了,就改用CStdioFile直接写入文件了。
砝码 2009-05-30
  • 打赏
  • 举报
回复
友情顶一下。
chengxu19890815 2009-05-30
  • 打赏
  • 举报
回复
帮楼主顶一下
梧桐126 2009-05-30
  • 打赏
  • 举报
回复
可以把Excel当成一个数据库,每次只需要插入一行就可以了!

void COdbcExcelDlg::WriteToExcel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = ".\\demo.xls";// 要建立的Excel文件
CString sSql;

TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
sDriver,sExcelFile,sExcelFile);

// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构(姓名、年龄)
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);

// 插入数值
sSql = "INSERT INTO demo (Name,Age) VALUES ('张宏林',25)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES ('肖洪伟',24)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES ('蒋渝',34)";
database.ExecuteSQL(sSql);
}
// 关闭数据库
database.Close();
}
CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
}
END_CATCH_ALL;
}
jian_tian_yang 2009-05-30
  • 打赏
  • 举报
回复
帮楼主顶一下
GS_Neo 2009-05-26
  • 打赏
  • 举报
回复
http://club.excelhome.net/thread-259968-1-949.html
oysoft 2009-05-25
  • 打赏
  • 举报
回复
可以一次填充一个二维数据,然后一次写入
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧