我的应用程序应该解析一个文本文件(相对容易)并创建一个excel电子表格报告。解析文本文件并创建一个excel报告
我应该编写一个独立的VB.NET应用程序来保存excel文件,还是应该使用VSTO?我不确定在开发简易性,可用性问题,可用的API函数等方面是否存在差异。
是否有任何其他编程语言/接口/库允许我快速开发涉及的Excel电子表格?我说这样的事情功能,图表等
谢谢
我的应用程序应该解析一个文本文件(相对容易)并创建一个excel电子表格报告。解析文本文件并创建一个excel报告
我应该编写一个独立的VB.NET应用程序来保存excel文件,还是应该使用VSTO?我不确定在开发简易性,可用性问题,可用的API函数等方面是否存在差异。
是否有任何其他编程语言/接口/库允许我快速开发涉及的Excel电子表格?我说这样的事情功能,图表等
谢谢
通过利用excel 2007格式(.xlsx) ,您可以非常轻松地做到这一点。以下是我所做的,您可以轻松修改它。我基本上利用xlsx文件实际上只是一个包含xml文件的zip文件。
我创建了一个名为Empty.xlsx的空excel文件,并将其作为资源添加到我的应用程序中。 (构建动作嵌入资源)
我也使用标准zip和解压缩库,因为这是如何得到的Excel文件的部分。
这里是我如何拿一个数据表和创建excel文件..注意,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(<c t="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(<c t="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
至于以何种方式,你开发这个应用程序,这真的取决于你。我会根据您希望使用的部署类型来确定它。
如果您选择在Excel以外完成,那么我会查看EPPlus。
对于商业图书馆,您应该查看Aspose Cells和SpreadsheetGear。
我已经使用了一段时间,但我记得Aspose方法的重点是从代码调用它们的库,并且不需要Excel,而SpreadsheetGear更多地是模板驱动的。
的SpreadsheetGear允许你开始使用模板并对其进行修改,或用新的空工作簿启动和使用全面的API - 这恰好是非常类似于Excel的API。 – 2010-11-10 14:49:21
请注意,我没有使用excel,并且所有内容都在内存中完成。它快速发展。 – 2010-10-22 18:35:33