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

时间:2009-03-12 19:00:33

标签: excel vb6 excel-vba excel-2007 vba

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

所以我继续将变化编码并呈现给他们,然后我被告知这个程序将被安装的机器上没有Excel的完整副本,我必须拿出另一个溶液

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

我还有一些想法:

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

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

我真的很难过,不知道接下来的方向。有人对上面的utitiles有任何想法吗?此外,我也对任何其他建议/更好的方法持开放态度。任何有助于我完成这项任务的事情都将不胜感激!

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

10 个答案:

答案 0 :(得分:4)

让我们来看看这两个要求:

  

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

  

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

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

在Google上搜索有关SpreadSheetML的其他信息时要小心:有一个很多的错误信息将SpreadSheetML与Office 2007中用于Excel的新Xml格式混淆.SpreadSheetML可以像OfficeXP一样工作,甚至在Office 2000中也是有限的意义上。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

像往常一样创建CSV文件。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

可以在没有安装Excel的计算机上创建Excel工作簿**使用Jet连接 - 任何Jet连接 - 执行“make table query”SQL DML或CREATE TABLE 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测试的机器!

答案 5 :(得分:0)

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

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

或者,您可以创建HTML Table in-momery内容并将其写入文件,扩展名为xls。

答案 6 :(得分: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中打开。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

我找到了解决方案:

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