Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 解析文本文件并创建excel报告_Vb.net_Visual Studio_Excel_Vsto_Spreadsheet - Fatal编程技术网

Vb.net 解析文本文件并创建excel报告

Vb.net 解析文本文件并创建excel报告,vb.net,visual-studio,excel,vsto,spreadsheet,Vb.net,Visual Studio,Excel,Vsto,Spreadsheet,我的应用程序应该解析一个文本文件(相对容易)并创建一个excel电子表格报告 我应该编写一个保存excel文件的独立VB.NET应用程序,还是应该使用VSTO?我不确定在开发的易用性、可用性问题、可用的API函数等方面是否存在任何差异 是否有其他编程语言/接口/库允许我快速开发相关的excel电子表格?我说的是函数、图形等 谢谢至于您以何种形式开发此应用程序,这完全取决于您。我会根据您希望使用的部署类型来确定 如果您选择在excel之外执行此操作,那么我将研究。至于以何种形式开发此应用程序,这实

我的应用程序应该解析一个文本文件(相对容易)并创建一个excel电子表格报告

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

是否有其他编程语言/接口/库允许我快速开发相关的excel电子表格?我说的是函数、图形等


谢谢

至于您以何种形式开发此应用程序,这完全取决于您。我会根据您希望使用的部署类型来确定


如果您选择在excel之外执行此操作,那么我将研究。

至于以何种形式开发此应用程序,这实际上取决于您。我会根据您希望使用的部署类型来确定


如果您选择在excel之外执行此操作,那么我将查看。

对于商业库,您应该查看和


我已经有一段时间没有使用过这两种方法了,但我记得Aspose方法的重点是从代码中调用它们的库,不需要Excel,而SpreadsheetGear则更多地由模板驱动

对于商业图书馆,您应该查看和


我已经有一段时间没有使用过这两种方法了,但我记得Aspose方法的重点是从代码中调用它们的库,不需要Excel,而SpreadsheetGear则更多地由模板驱动

利用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
Private函数CreateExcelReport(ByVal FilePath作为字符串,ByVal tbl作为DataTable)作为FileInfo
'只需从程序集中加载excel文件,也可以从文件中加载
Dim_assembly As assembly=assembly.getExecutionGassembly
将xlStream调整为新的StreamReader(_assembly.GetManifestResourceStream(“YourAssembly.Empty.xlsx”))
'创建一个新的fileinfo,它将保存输出的excel文件和数据。
将fiRet变暗为新文件信息(文件路径)
“我使用Ionic Zip精简免费库将slsx文件分解为子部分
使用z作为ZipFile=ZipFile.Read(xlStream.BaseStream)
'从文件部分抓取工作表1并将其读入字符串。
Dim myEntry作为ZipEntry=z(“xl/worksheets/sheet1.xml”)
将msSheet1变暗为新的内存流
myEntry.摘录(msSheet1)
msSheet1.位置=0
Dim sr作为新的流读卡器(msSheet1)
Dim strXMLData As String=sr.ReadToEnd
'抓取空表中的数据并交换出我想要的数据
尺寸str2为XElement=CreateSheetData(待定)
Dim strReplace As String=strXMLData.Replace(“,str2.ToString)
z、 UpdateEntry(“xl/worksheets/sheet1.xml”,strReplace)
'这只是用它没有保存到磁盘的新数据重新压缩文件
z、 保存(fiRet.FullName)
终端使用
'返回要保存到磁盘或数据库或流式传输到浏览器的Fileinfo类
回炉
端函数
私有函数CreateSheetData(ByVal dt作为DataTable)作为XElement
尺寸数据作为像素=
'创建标题行
作为新元素的暗头错误()
对于j=0到dt.Columns.Count-1
Dim c作为新的XElement()
Dim_与新的XElement()相同
将v标注为新的XElement()
v、 添加(dt.Columns(j.ColumnName)
_is.Add(v)
c、 添加(_is)
标题错误添加(c)
下一个
sheedata.Add(HeaderRow)
'为每个数据行创建行
对于dt.行中的每个dr As数据行
将新行变暗为新像素()
对于j=0到dt.Columns.Count-1
Dim c作为新的XElement()
Dim_与新的XElement()相同
将v标注为新的XElement()
v、 添加(dr(j).ToString)
_is.Add(v)
c、 添加(_is)
newrow.Add(c)
下一个
sheedata.Add(新行)
下一个
返回数据
端函数

利用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
Private函数CreateExcelReport(ByVal FilePath作为字符串,ByVal tbl作为DataTable)作为FileInfo
'只需从程序集中加载excel文件,也可以从文件中加载
Dim_assembly As assembly=assembly.getExecutionGassembly
将xlStream调整为新的StreamReader(_assembly.GetManifestResourceStream(“YourAssembly.Empty.xlsx”))
'创建一个新的fileinfo,它将保存输出的excel文件和数据。
将fiRet变暗为新文件信息(文件路径)
“我使用Ionic Zip精简免费库将slsx文件分解为子部分
使用z作为ZipFile=ZipFile.Read(xlStream.BaseStream)
'从文件部分抓取工作表1并将其读入字符串。
Dim myEntry作为ZipEntry=z(“xl/worksheets/sheet1.xml”)
将msSheet1变暗为新的内存流
myEntry.摘录(msSheet1)
msSheet1.位置=0
Dim sr作为新的流读卡器(msSheet1)
Dim strXMLData As String=sr.ReadToEnd
'抓取空表中的数据并交换出我想要的数据
尺寸str2为XElement=CreateSheetData(待定)
暗条纹