2009-09-09 110 views
2

我正在使用visual basic(visual studio 2008)构建一个windows窗体应用程序。如何从未安装Office的winform vb.net 2008导出为ex​​cel?

这个想法是查询MySQL数据库并将结果导出到Excel文档。

我管理这个使用此代码(我将只显示导出到Excel部分)做:

Imports Excel = Microsoft.Office.Interop.Excel 
Imports System.IO 
Imports System.Data 
Imports MySql.Data.MySqlClient 
Imports System.Configuration 
Imports System.Runtime.InteropServices 

Private Sub btn_getReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_getReport.Click 

    Dim wb As Excel.Workbook 
    Dim ex As New Excel.Application 
    wb = ex.Workbooks.Add(System.Reflection.Missing.Value) 
    Dim sheet As Excel.Worksheet = CType(wb.Worksheets.Add, Excel.Worksheet) 
    sheet.Name = "algo" 

    Dim i As Integer = 1 

    Try 
     While reader.Read 
      sheet.Cells(i, 1) = CStr(reader.Item(0)) 
      sheet.Cells(i, 2) = CStr(reader.Item(1)) 
      sheet.Cells(i, 3) = CStr(reader.Item(2)) 
      i += 1 
     End While 
    Catch MyEx As MySqlException 
     RaiseEvent MySqlError(Err, MyEx, "read") 
    Catch exc As Exception 
     RaiseEvent MySqlError(Err, exc, "read") 
    End Try 


    Dim dialog As New SaveFileDialog 
    Dim result As DialogResult = dialog.ShowDialog 
    Try 
     wb.SaveAs(dialog.FileName) 
    Catch exerr As Exception 
    End Try 
    'Show the spreadsheet. 
    'ex.Visible = True 
    'wb.Activate() 

End Sub 

,它工作正常在我的笔记本电脑(其中有安装Office 2003),但是当我创建安装程序包和我要去的地方使用它(它没有安装Office)在服务器上安装它,我得到这个错误:

"Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154."

对于我已阅读,这是在尝试将问题当它没有出现在计算机上时使用excel,我可以理解,真正让我困惑的是这个我曾经使用应用程序导出信息,即使在计算机上运行也无需安装Office,他们如何才能做到这一点?

而为了记录,我需要excel文件,而不是CSV。

非常感谢。

回答

0

你已经完全诊断出这个问题。这是个好消息。坏消息是,如果没有在计算机上安装Excel DLL,则无法使用Excel Interop。

您的选择:

  1. 其中 这将运行在计算机上安装Excel。
  2. 拉动DLL(库),并将它们与您的应用程序一起部署到 。在 这样做的情况下,您可能违反了与Microsoft签订的 许可协议。 这样做需要您自担风险。
  3. 用手由办公室使用的Open XML格式的创建Excel电子表格2007

要做到第三个选项,看看这篇文章的格式为Excel 2007:http://msdn.microsoft.com/en-us/library/aa338205.aspx

简而言之,你会将你的数据读入数据集。然后你将它导出到一个XML文件。将该文件与任何支持信息一起粘贴到一个zip文件中,并将扩展名更改为.xlsx。这比这更复杂一点,但并不多。

+0

谢谢您的帮助。 关于三个选项:1-由于授权问题,我无法在服务器上安装Excel,2-与上面相同,3-我必须使用Excel 2003,第一个解决方案看起来更简单,至少对于我需要完成的任务现在。 非常感谢您的详细和非常明确的答案。 – user33177

+0

酷!很高兴你有一些帮助。 :-) – Rap

0

如果你真的想avaid导出到一个逗号或Excel可以完美处理tabdelimited文件的简便方法...

...然后生成XML导出到Excel的XML格式(SpreadsheetML中) /使用xsl。你可以找到一个example here。应该从Excel 2002+工作。

+0

感谢您的帮助,但是我发现上述解决方案更容易实施。非常感谢! – user33177

0

可导出Excel文件,可与包括WinForms在内的任何.NET解决方案配合使用,不需要安装Excel。

您可以看到现场示例here并下载免费试用here

声明:我自己的SpreadsheetGear LLC