如何在c+中读取/写入数据到excel 2007+;? 。从下载SDK。SDK使用.NET,所以你可能需要使用C++ .NET < /P> < P>一个我在几个项目中使用的低技术方法是制作一个简单的脚本/宏/运行外部程序的任何东西。用C++编写外部程序。获取外部程序以读取其输入并将其输出写入.csv文件(简单的逗号分隔值文本文件)。Excel可以轻松读取和写入.csv文件,因此此设置为您提供了制定可行解决方案所需的一切。

如何在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,设置范围,获取值,设置值,保存(或

这已经有很长时间了,但我使用Jet OLEDB获取Excel文件。你可以开始在那个方向搜索。

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文件

因此,解决方案是:

  • 使用公共类解压xlsx
  • 使用xml解析器获取数据
  • 如果您修改了某些内容,请重新压缩所有内容
  • 不需要COM对象。
    根据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;