parsing文本文件并创build一个Excel报告

我的应用程序应该parsing一个文本文件(相对容易),并创build一个Excel电子表格报告。

我应该写一个独立的VB.NET应用程序保存excel文件,还是应该使用VSTO? 我不确定在开发的便捷性,可用性问题,可用的API函数等方面是否有差异。

有没有其他的编程语言/接口/库,可以让我快速开发涉及的Excel电子表格? 我正在谈论的function,graphics等

谢谢

通过利用excel 2007格式(.xlsx),您可以非常轻松地做到这一点。这是我所做的,您可以很容易地修改它。 我基本上是利用xlsx文件实际上只是一个包含xml文件的zip文件。

我创build了一个名为Empty.xlsx的空excel文件,并将其作为资源添加到我的应用程序中。 (build立行动embedded资源)

我也使用标准的zip和解压缩库,因为这是如何得到的Excel文件的部分。

这里是我如何拿一个数据表和创buildExcel文件..注意,Excel是不是真的需要。

Private Function CreateExcelReport(ByVal FilePath As String, ByVal tbl As DataTable) As FileInfo 'Just loading the excel file from the assembly, you could do it from a file also Dim _assembly As Assembly = Assembly.GetExecutingAssembly Dim xlStream As New StreamReader(_assembly.GetManifestResourceStream("YourAssembly.Empty.xlsx")) 'Create a new fileinfo that will hold the outputed excel file with the data. Dim fiRet As New FileInfo(FilePath) 'Im using Ionic Zip Reduced free library to break the slsx file into its subparts Using z As ZipFile = ZipFile.Read(xlStream.BaseStream) 'Grab Sheet 1 out of the file parts and read it into a string. Dim myEntry As ZipEntry = z("xl/worksheets/sheet1.xml") Dim msSheet1 As New MemoryStream myEntry.Extract(msSheet1) msSheet1.Position = 0 Dim sr As New StreamReader(msSheet1) Dim strXMLData As String = sr.ReadToEnd 'Grab the data in the empty sheet and swap out the data that I want Dim str2 As XElement = CreateSheetData(tbl) Dim strReplace As String = strXMLData.Replace("<sheetData/>", str2.ToString) z.UpdateEntry("xl/worksheets/sheet1.xml", strReplace) 'This just rezips the file with the new data it doesnt save to disk z.Save(fiRet.FullName) End Using 'Return a Fileinfo class to be saved to disk or DB or streamed to browser Return fiRet End Function Private Function CreateSheetData(ByVal dt As DataTable) As XElement Dim sheedata As XElement = <sheetData></sheetData> 'Create Header Rows Dim HeaderRow As New XElement(<row></row>) For j = 0 To dt.Columns.Count - 1 Dim c As New XElement(<ct="inlineStr"></c>) Dim _is As New XElement(<is></is>) Dim v As New XElement(<t></t>) v.Add(dt.Columns(j).ColumnName) _is.Add(v) c.Add(_is) HeaderRow.Add(c) Next sheedata.Add(HeaderRow) 'Create row for each datarow For Each dr As DataRow In dt.Rows Dim newrow As New XElement(<row></row>) For j = 0 To dt.Columns.Count - 1 Dim c As New XElement(<ct="inlineStr"></c>) Dim _is As New XElement(<is></is>) Dim v As New XElement(<t></t>) v.Add(dr(j).ToString) _is.Add(v) c.Add(_is) newrow.Add(c) Next sheedata.Add(newrow) Next Return sheedata End Function 

就你开发这个应用程序的forms而言,这真的取决于你。 我会根据您希望使用的部署types。

如果你select在Excel以外做,那么我会考虑EPPlus 。

对于商业图书馆,你应该看看Aspose Cells和SpreadsheetGear 。

我已经使用了一段时间了,但是我记得Aspose方法的重点是从代码中调用它们的库,并且不需要Excel,而SpreadsheetGear更多的是模板驱动。