如何在c+中读取/写入数据到excel 2007+;? 。从下载SDK。SDK使用.NET,所以你可能需要使用C++ .NET < /P> < P>一个我在几个项目中使用的低技术方法是制作一个简单的脚本/宏/运行外部程序的任何东西。用C++编写外部程序。获取外部程序以读取其输入并将其输出写入.csv文件(简单的逗号分隔值文本文件)。Excel可以轻松读取和写入.csv文件,因此此设置为您提供了制定可行解决方案所需的一切。
这已经有很长时间了,但我使用Jet OLEDB获取Excel文件。你可以开始在那个方向搜索。如何在c+中读取/写入数据到excel 2007+;? 。从下载SDK。SDK使用.NET,所以你可能需要使用C++ .NET < /P> < P>一个我在几个项目中使用的低技术方法是制作一个简单的脚本/宏/运行外部程序的任何东西。用C++编写外部程序。获取外部程序以读取其输入并将其输出写入.csv文件(简单的逗号分隔值文本文件)。Excel可以轻松读取和写入.csv文件,因此此设置为您提供了制定可行解决方案所需的一切。,c++,excel-2007,visual-c++-6,C++,Excel 2007,Visual C++ 6,这已经有很长时间了,但我使用Jet OLEDB获取Excel文件。你可以开始在那个方向搜索。Excel提供了你可以从C++应用程序使用的COM接口。 我只有使用Excel2003的经验,但我认为对于Excel2007,它也会起作用 这可以通过#导入或本文描述的方式完成: 这里有一个python解决方案(使用COM调度): < >不是C++,但是无论你使用哪种语言,COM接口都应该是相同的,对吗? 你不需要把所有的东西都装进去。只需\uuuu init\uuuu,设置范围,获取值,设置值,保存(或
Excel提供了你可以从C++应用程序使用的COM接口。 我只有使用Excel2003的经验,但我认为对于Excel2007,它也会起作用
这可以通过#导入或本文描述的方式完成:这里有一个python解决方案(使用COM调度): < >不是C++,但是无论你使用哪种语言,COM接口都应该是相同的,对吗? 你不需要把所有的东西都装进去。只需
\uuuu init\uuuu
,设置范围
,获取值
,设置值
,保存
(或另存为
),关闭
,以及退出
。您可能还需要处理垃圾(因为python有自动gc)
或者您可以移植(并修改)以下代码(我还没有测试过,因为我没有excel了-您可能应该下载python和pythonwin来检查):
这一切都可以通过IDispatch接口完成。它可能会很快变得非常复杂(微软欢呼),但至少在您熟悉Excel之后,您会发现与任何其他MS应用程序的集成也很容易:) 幸运的是,有人让这个过程变得轻松愉快。一旦我读完了这些代码,我就开始了解excel在做什么,而且,我发现扩展它来做我想做的其他事情变得非常容易。请记住,您正在通过IDispatch界面向Excel发送命令。这意味着您需要考虑如何做一些事情,以找出如何通过编程来完成
编辑:代码专家示例是针对Excel 2003的,但将其扩展到2007应该相当容易:)我过去为此使用了第三方组件:OLE XlsFile from(不是免费的,但价格便宜)。与Microsoft COM组件相比,此组件的优势在于,即使未安装Excel,您也可以使用它编写XLS文件
它还允许您创建带有嵌入公式和格式的speadsheet或工作簿,如果您使用CSV文件作为交换格式,这是不可能的。如果您需要最佳性能,编写二进制Excel文件是一种方法,编写它们并不像读取它们那样困难。OpenOffice.org项目对二进制文件格式进行了比较完善的记录: 微软还发布了以下文档: 如果您必须编写许多Excel文件,其中大部分包含数据和少量格式,并且不想同时打开这些文件,则此解决方案将最为有效。如果你写一个Excel文件,然后打开它,你可能会使用支持的C++ COM接口,其他的海报已经解释。p>
除非您编写Excel COM加载项,否则使用COM接口将需要昂贵的进程外调用。如果编写将数据导入当前Excel工作表的加载项,填充工作表的速度仍将比转储文件慢得多,但对于单个文件而言,这是可以接受的,具体取决于您的用户场景。如果您决定使用COM接口,请尽量减少对Excel的调用次数。使用允许插入值数组的方法(如果存在),可以按行和列设置样式特性,而不是按单元格设置样式特性 Excel2007文件只是zip文件。尝试将.xlsx重命名为.zip:您可以提取文件和文件夹。使用文本编辑器,您可以查看它们都是XML文件 因此,解决方案是:
根据C++编译器,你可以很容易地找到所需的源。< P>你可以使用ODBC轻松地从Excel文件中读取和写入数据,而不需要Excel。链接:
使用ODBC:< /P> < P>如何编写数据的链接。我使用了一组C++代码类,这些代码类可从代码项目中获得,然后写入XLS文件。p> 它真的很容易使用,而且是免费的!你可以找到它
我没有花时间设置。您需要做三件主要的事情 1) 确保先决条件文件已安装并可定位 我知道这是显而易见的,但请确保您安装了合适版本的Excel,以便您可以找到所需的Microsoft库(及其位置)。 即MSO.DLL、VBE6EXT.OLB和EXCEL.EXE 2) 设置Microsoft库
在C++代码中,假设您从一个简单的控制台应用程序开始,请确保在与Excel接口的任何C++应用程序中包含导入库。在我的示例中,我使用:
#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \
rename( "RGB", "MSORGB" )
using namespace Office;
#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"
using namespace VBIDE;
#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \
rename( "DialogBox", "ExcelDialogBox" ) \
rename( "RGB", "ExcelRGB" ) \
rename( "CopyFile", "ExcelCopyFile" ) \
rename( "ReplaceText", "ExcelReplaceText" ) \
exclude( "IFont", "IPicture" ) no_dual_interfaces
3)在C++代码
中使用Excel对象模型 例如,要声明用于读取/写入Excel工作簿的Excel应用程序对象指针,请执行以下操作:Excel::_ApplicationPtr pXL;
pXL->Workbooks->Open( L"C:\\dump\\book.xls" );
以及访问和操作Excel工作表及其单元格:
Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;
Excel::RangePtr pRange = pWksheet->Cells;
double value = pRange->Item[1][1];
pRange->Item[1][1] = 5.4321;
等等。下面我将对此进行更深入的讨论。我对仅为此目的使用.NET持怀疑态度,因为我的应用程序目前还没有使用.NET
Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;
Excel::RangePtr pRange = pWksheet->Cells;
double value = pRange->Item[1][1];
pRange->Item[1][1] = 5.4321;