Разбор текстового файла и создание отчета Excel - PullRequest
0 голосов
/ 22 октября 2010

Мое приложение должно анализировать текстовый файл (относительно легко) и создавать отчет в виде таблицы в формате Excel.

Должен ли я написать отдельное приложение VB.NET, которое сохраняет файл Excel, или я должен использовать VSTO? Я не уверен, есть ли какие-либо различия с точки зрения простоты разработки, проблем с юзабилити, доступных функций API и т. Д.

Существуют ли какие-либо другие языки программирования / интерфейсы / библиотеки, которые позволят мне быстро разработать соответствующую таблицу Excel? Я говорю о таких вещах, как функции, графики и т. Д.

Спасибо

Ответы [ 3 ]

2 голосов
/ 22 октября 2010

Вы можете сделать это очень легко, воспользовавшись форматом Excel 2007 (.xlsx) Вот что я сделал, вы можете изменить это довольно легко. Я в основном пользуюсь тем, что xlsx-файл - это просто zip-файл, содержащий xml-файлы.

Я создал пустой файл Excel с именем Empty.xlsx и добавил его в свое приложение в качестве ресурса. (встроенный ресурс действия сборки)

Я также использую библиотеку для стандартного zip и unzip, поскольку именно так вы получаете в частях файла 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
1 голос
/ 22 октября 2010

Для коммерческих библиотек вы должны посмотреть на Aspose Cells и SpreadsheetGear .

Прошло много времени с тех пор, как я использовал их, но я вспоминаю, что подход Aspose ориентирован на вызов их библиотек из кода и не требует Excel, в то время как SpreadsheetGear несколько более управляем на основе шаблонов.

1 голос
/ 22 октября 2010

Насколько вы разрабатываете это приложение, зависит от вас.Я бы основывал его на том, какой тип развертывания вы бы хотели использовать.

Если вы решите сделать это вне Excel, я бы посмотрел на EPPlus .

...