3

我最近负责更新 VB6 数据收集应用程序,以添加生成 Excel 报告并通过应用程序打印它们的功能(两者都必须在同一台计算机上完成)。通常这不会是一个问题,在使用 Excel 对象之前,我已经使用 VB6 生成了 Excel 报告。

所以我继续将更改编码并呈现出来,然后我被告知将安装此程序的机器上没有完整的 Excel 副本,我必须想出另一个解决方案。

我尝试创建分隔文件(逗号分隔或文本),但是当使用 excel 打开这些文件时,它们的格式不正确,即如果一个单元格有 20 个字符,由于单元格大小固定,一半的字符将被截断。

我还有几个想法:

1)我知道openoffice有一个api。这个api可以用来生成格式正确的excel文件吗?有我可以使用的 COM 对象吗?

2)我找到了这个工具: http: //www.carlosag.net/Tools/ExcelXmlWriter/ 但是,它是用VB.NET编写的。我还能在 VB6 中使用这个工具吗?

我真的很难过,不知道下一步该往哪个方向走。有人对上述实用程序有任何想法吗?此外,我也愿意接受任何其他建议/更好的方法。任何能帮助我完成这项任务的东西都将不胜感激!

注意:用于查看这些报告的 Excel 版本是 Excel 2007

4

10 回答 10

4

我们来看看这两个要求:

添加生成 Excel 报告并通过应用程序打印的功能。

将安装此程序的机器[原文如此] 不会有 Excel 的完整副本

除非我误解了你,否则这些似乎是相互排斥的。如果您的意思是您将只在一台机器上生成报告并且它们将在其他地方查看和打印,您可以尝试使用SpreadSheetML

在谷歌上搜索有关 SpreadSheetML 的其他信息时要小心:有很多错误信息将 SpreadSheetML 与 Office 2007 中用于 Excel 的新 Xml 格式混淆。SpreadSheetML 可以追溯到 OfficeXP,甚至在 Office 2000 中的意义有限。

于 2009-03-12T19:22:50.177 回答
1

您可以将excel文件保存为html。在我编写的需要将数据导出为 excel 的 Web 应用程序中,我刚刚创建了一个 html 文件,就像一个 excel 导出文件一样。然后我将它作为 application/vnd.ms-excel 服务。Excel 打开它就好了。你可能会做类似的事情。

您还可以找到一个类似于您链接的库,它直接编写新的 office 文件格式,因为我认为它们是 xml 的衍生物。

于 2009-03-12T19:10:43.997 回答
1

像往常一样创建 CSV 文件。

在打印之前,让您的桌面应用程序在 XLS 文件可用的机器上进行格式化。

于 2009-03-12T19:13:58.543 回答
0

如果您愿意安装 .NET 运行时,您可以将库包装在选项 #2 中,并使用暴露给 COM 的 .NET 类。该类只是将调用传递给 ExcelXMLwriter。

另一种方法是研究 XML 标准并编写自己的编写器,但这可能对项目来说太过分了。

至于 OpenOffice 看看这里。尤其是本页的 VBA部分。似乎有一个您可以使用的 COM 组件。

于 2009-03-12T19:12:32.917 回答
0

可以在没有安装 Excel 的机器上创建 Excel 工作簿**,方法是使用 Jet 连接(任何 Jet 连接)执行“生成表查询”SQL DML 或CREATE TABLESQL DLL,其中有问题的表是 Excel 表例如考虑这个 VBA 代码:

Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat  

  ' Create a new Jet .mdb
  .Create _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & _
      Environ$("temp") & "\DropMe.mdb"
  ' Use .mdb's Jet connection to create an Excel table
  ' (will create a new workbook to contain it)
  .ActiveConnection.Execute _
     "CREATE TABLE" & _
     " [Excel 8.0;HDR=NO;Database=C:\db.xls;].[Sheet1]" & _
     " (col FLOAT);"
End With

Jet 是一个已弃用的 Windows 组件,它始终存在于 Vista 之前的 Windows 机器上,并且仍然可以通过 MDAC 从 MS 免费下载。

也就是说,“要通过 [Excel] 应用程序打印它们”,您显然需要 Excel 应用程序!

** 我认为有可能:我找不到没有 Excel 的机器来测试!

于 2009-03-13T10:56:46.593 回答
0

检查这个: http: //support.microsoft.com/default.aspx ?scid=kb;en-us;Q271572

执行相同的操作并使用 .xls 扩展名保存文件。

或者,您可以在内存中创建 HTML 表格内容并将其写入文件,扩展名为 xls。

于 2009-03-13T11:25:29.847 回答
0

从 VB6 创建一个 SpreadsheetML 文件应该非常简单。它只是一个包含特定 xml 风格的文本文件。我相信您可以从 MSDN 获得 SpreadsheetML 和 WordML 的所有文档。

我目前使用 SpreadsheetML 从 vb.net 应用程序生成大约 60 种不同的自定义报告。由于 Excel 2007 中实现的文件扩展名和文档安全性的更改,至少存在一个潜在问题。如果您生成基于 SpreadsheetML 的 Excel 文件并使用 .xls 扩展名,它将在 2003 年正常打开。Excel 2007 将弹出一个对话框通知您文件扩展名与文件内容不匹配。警告对话框后,它将正确打开并显示文件。如果您将 SpreadsheetML 文档的扩展名更改为 .xml,Excel 2007 将毫无怨言地打开它。但是,您的基于 xml 的电子表格可能会在运行 Excel 2003 的机器上的 IE 中打开。

于 2009-03-26T20:01:34.550 回答
0

我使用NPOI 它不使用 excel 库并以 excel 2003 格式输出

于 2010-09-17T09:56:57.047 回答
0

我也会选择 CSV 选项。不需要 DLL 或其他类型的对象。一个警告是要非常小心数字使用的格式,因为 1,024.00 的值会创建两列并软管整个工作簿。它将被格式化为 Format(Numberfield,"#########.#0")

于 2012-02-08T20:40:06.440 回答
-1

我找到了一个解决方案:

我找到了一个可用于创建和打印 Excel 电子表格的 DLL。我认为它与 XML 编写器相同,但适用于 VB6。

于 2009-03-16T14:31:56.343 回答