Как экспортировать в Excel из winform vb.net 2008 без установленного офиса? - PullRequest
2 голосов
/ 10 сентября 2009

Я создаю приложение Windows Form, используя Visual Basic (Visual Studio 2008).

Идея состоит в том, чтобы запросить базу данных 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

И он отлично работает на моем ноутбуке (на котором установлен офис 2003), но когда я создаю установочный пакет и устанавливаю его на сервере, где я собираюсь его использовать (на котором не установлен офис), я получаю это ошибка:

"Получение фабрики класса COM для компонент с CLSID {00024500-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80040154 ".

Для того, что я прочитал, это проблема при попытке использовать Excel, когда его нет на компьютере, я могу понять, что меня действительно смущает то, что я использовал приложения, которые экспортируют информацию в Excel, даже если они работают на компьютерах без установки офиса на них, как они могут это сделать?

И для записи мне нужен файл excel, а не CSV.

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2009

Если вы действительно хотите воспользоваться простым способом экспорта в файл с запятыми или табуляциями, который превосходно справится ...

... затем экспортируйте в формат Excel-XML (spreadsheetml), создав xml / используя xsl. Вы можете найти пример здесь . Должно работать с Excel 2002 +.

0 голосов
/ 10 сентября 2009

SpreadsheetGear for .NET может экспортировать файлы Excel, работает с любым решением .NET, включая WinForms, и не требует установки Excel.

Вы можете посмотреть живые образцы здесь и загрузить бесплатную пробную версию здесь .

Отказ от ответственности: я владею SpreadsheetGear LLC

0 голосов
/ 10 сентября 2009

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

Ваши варианты:

  1. Установить Excel на машину где это будет работать.
  2. Потяните библиотеки DLL (библиотеки) и разверните их с вашим приложением. В делая это, вы, вероятно, нарушаете лицензионные соглашения с Microsoft. Делайте это на свой страх и риск.
  3. Создание электронных таблиц Excel вручную в формате Open XML, используемом Office 2007.

Чтобы сделать третий вариант, взгляните на формат для Excel 2007 в этой статье: http://msdn.microsoft.com/en-us/library/aa338205.aspx

В двух словах, вы будете читать ваши данные в наборе данных. Затем вы экспортируете его в файл XML. Создайте этот файл вместе со всей необходимой информацией в zip-файле и измените расширение на .xlsx Это немного сложнее, но не намного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...