如何在没有Excel对象的情况下通过VB6创建Excel工作表?

如何在没有Excel对象的情况下通过VB6创建Excel工作表?,vb6,excel,excel-2007,vba,Vb6,Excel,Excel 2007,Vba,我最近负责更新一个VB6数据收集应用程序,添加生成Excel报告并通过该应用程序打印报告的功能(两者必须在同一台计算机上完成)。通常这不会是一个问题,在使用Excel对象之前,我已经用VB6生成了Excel报告 因此,我继续将更改编码在一起,并将它们呈现出来,然后我被告知安装此程序的机器上不会有Excel的完整副本,我必须想出另一个解决方案 我尝试创建分隔文件(逗号分隔或文本),但当用excel打开这些文件时,它们的格式不好,即如果一个单元格有20个字符,由于固定的单元格大小,一半的字符将被截断

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

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

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

我还有几个想法:

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

2) 我发现这个工具: 但是,它是用VB.NET编写的。我仍然可以在VB6中使用此工具吗

我真的被难住了,不知道下一步该往哪个方向走。有人对上面的问题有什么想法吗?此外,我也愿意接受任何其他建议/更好的方法。任何有助于我完成这项任务的事情都将不胜感激


注意:用于查看这些报告的Excel版本是Excel 2007,您可以将Excel文件另存为html。在我编写的一个需要将数据导出为excel的web应用程序中,我只是创建了一个类似excel导出的html文件。然后我将其作为application/vnd.ms-excel使用。Excel可以很好地打开它。你也可以做类似的事情


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

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

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


至于OpenOffice,请看一看。特别是本页的VBA部分。似乎有一个COM组件可以使用。

像平常一样创建CSV文件


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

让我们看看这两个要求:

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

安装此程序的计算机[sic]没有Excel的完整副本

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


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

可以在未安装Excel的计算机上创建Excel工作簿**,方法是使用Jet连接(任何Jet连接)执行“生成表查询”SQLDML或<代码>创建表< /COD> SQL 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的机器来测试

检查以下内容:

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

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

我找到了一个解决方案:


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

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

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

我使用
它不使用excel库,并以excel 2003格式提供输出

我也会选择CSV选项。不需要DLL或其他类型的对象。需要注意的一点是,在使用数字格式时要非常小心,因为1024.00的值将创建两列,并覆盖整个工作簿。它的格式类似于Format(Numberfield),“这似乎是一个相当简单的解决方案。有没有简单的方法来生成XML数据?我现在唯一能想到的方法就是用xml标记创建一个文本文件,并用xml扩展名保存它。我不知道vb6内置了什么样的xml支持,但是,即使您必须将其视为纯文本,它也可能比通过OpenOffice运行或从vb6.K调用.Net要好。我没有很好地阅读您的解决方案。“如果你是说你会