1
4
Excel提供了可以从C++应用程序使用的COM接口。 我只有Excel2003的经验,但我认为对于Excel2007,它也会起作用。 这可以通过导入或以本文描述的方式完成: http://support.microsoft.com/kb/216686 |
2
3
这里有一个python解决方案(使用com调度): http://snippets.dzone.com/posts/show/2036 它不是C++,但是无论你使用哪种语言,COM接口都应该是相同的,对吗?
你不需要把所有东西都装上港口。只是
或者,您只需导入(并修改)以下代码(我还没有测试过,因为我已经没有Excel了-您可能应该通过下载python和pythonwin来检查它):
|
3
3
Excel2007文件只是压缩文件。尝试将.xlsx重命名为.zip:您可以提取文件和文件夹。通过文本编辑器,您可以查看它们都是XML文件。 所以解决方案是:
不需要COM对象。 根据C++编译器,您可以很容易地找到所需的源。 |
4
3
你需要做三件事。 1)确保安装了必要的文件并可定位。 我知道这一点非常明显,但请确保您安装了适当版本的Excel,这样您就可以找到所需的Microsoft库(及其位置)。 即mso.dll、vbe6ext.olb和excel.exe 2)设置Microsoft库。 在C++代码中,假设您从一个简单的控制台应用程序开始,请确保在与Excel接口的任何C++应用程序中包含导入库。在我的示例中,我使用:
3)在C++代码中使用Excel对象模型 例如,要声明用于读/写Excel工作簿的Excel应用程序对象指针,请执行以下操作:
以及访问和操作Excel工作表及其内的单元格:
等等。下面我有一个更深入的讨论 blog posting . |
5
2
我在几个项目中使用的一种低技术方法是制作一个简单的脚本/宏/运行外部程序的任何东西。用C++编写外部程序。让外部程序从中读取其输入并将其输出写入.csv文件(简单的逗号分隔值文本文件)。Excel可以很容易地读取和写入.csv文件,所以这个设置为您提供了一个可行的解决方案所需的一切。 |
6
1
这一切都可以通过IDispatch接口完成。它可以很快变得非常复杂(干杯微软),但至少一旦你有了自己的头脑,你会发现与任何其他微软应用程序的集成也很容易:) 幸运的是有人在 codeguru 是谁让这个过程变得轻松愉快。当我读完这些代码后,我开始思考Excel在做什么,而且,我发现将它扩展到我想要的其他事情上变得非常容易。请记住,您正在通过IDispatch接口向Excel发送命令。这意味着你需要考虑如何做一些事情来弄清楚如何通过编程来实现。 编辑:代码专家的例子是针对Excel2003的,但是应该很容易将其扩展到2007:。 |
7
0
从这里开始 OpenXml Sdk . 从下载SDK here . SDK使用.NET,因此您可能需要使用C++.NET。 |
8
0
这已经很长时间了,但我已经使用JetOLEDB获取Excel文件。你可以从那个方向开始搜索。 |
9
0
我过去曾为此使用过第三方组件:来自的OLE XLS文件 SM Software (不是免费的,而是便宜的)。与Microsoft COM组件相比,此组件的优势在于,即使未安装Excel,也可以使用它来编写XLS文件。 它还允许您使用嵌入的公式和格式创建电子表格或工作簿,如果您使用csv文件作为交换格式,则是不可能的。 |
10
0
如果您需要最好的性能,那么编写二进制Excel文件是一种可行的方法,而编写它们并不像读取它们那么困难。二进制文件格式在openoffice.org项目中得到了很好的记录: http://sc.openoffice.org/excelfileformat.pdf 微软还发布了文档: 如果您必须编写许多Excel文件(大部分是数据文件,很少有格式),并且不想同时打开这些文件,则此解决方案最有效。如果你写了一个Excel文件之后打开它,你可以像其他海报所解释的那样使用支持的C++ COM接口。 使用COM接口将需要昂贵的进程外调用,除非您编写一个Excel COM加载项。如果编写一个将数据导入当前Excel工作表的加载项,则填充工作表的速度仍然比转储文件慢得多,但对于一个文件,一次只能填充一个文件,这取决于您的用户场景。如果确实决定使用COM接口,请尽量减少对Excel的调用次数。使用允许插入值数组(如果存在)的方法,可以按行和列设置样式属性,而不是按单元格。 |
Haox · 如何从另一列中的单元格求和? 7 年前 |
marv · Excel VBA union从列中删除数据 7 年前 |
Pramod · vlookup中的动态引用 8 年前 |
phillipsK · 如何将其添加到数组中? 9 年前 |
barteloma · Excel时间间隔返回相同范围内的不同值 9 年前 |
ThePatBan · 在逗号分隔列表的所有项前加一个常量值 10 年前 |
BenjaminFranklin · 随机数(1,11)但不是6? 10 年前 |
HumanlyRespectable · 不需要的插入行无限循环 10 年前 |