bluesathish Ответов: 3

как экспортировать таблицу в xls файл в vb.net


Дорогие Все,
У меня есть один datatable, я хочу экспортировать значения этого datatable в файл. xls (файл Excel) без ссылки на сборки excel, потому что я не устанавливал MS Excel на свой компьютер, но вместо этого у меня есть открытое офисное программное обеспечение для обработки файлов xls.
Поэтому кто-нибудь подскажет мне, как экспортировать мои данные в формат файла .xls.

С уважением,
Синеватый

3 Ответов

Рейтинг:
28

StianSandberg

Я могу порекомендовать ClosedXml. Он с открытым исходным кодом и прост в использовании..

Вы скачиваете его с сайта узел CodePlex и добавьте ссылку в свой проект.

var wb = new XLWorkbook();
wb.Worksheets.Add(yourDataTable);
wb.SaveAs("myExcelFile.xlsx");


PS.. ClosedXml поддерживает только .xlsx!


bluesathish

Привет Аллювиалдепозит,
спасибо за ваш ответ, но я хочу экспортировать его только в файл .xls, а также не хочу добавлять какой-либо внешний компонент, подобный этому ClosedXml, есть ли возможность сделать это с помощью vb.net кодировки?

barryblessing

Извините, если это слишком поздний ответ, но используйте ClosedXML для экспорта в формат .XLSX. Затем используйте электронную таблицу Excel 2003 (или выше) или OpenOffice для сохранения .Файл XLSX в формате. XLS. Библиотека ClosedXML очень эффективна.

StianSandberg

без внешнего компонента ... удачи. Я не думаю, что вы даже попытаетесь сделать это в xls-формате.. Вам нужна сторонняя библиотека, но это не значит, что вам придется устанавливать MS Office на свой сервер.

bluesathish

хорошо, но у меня есть открытое офисное программное обеспечение, как я могу использовать его сборки для экспорта?, мы обычно делаем это с помощью Microsoft.Офис.Interop, в открытом офисе есть ли у нас подобные сборки, чтобы сделать то же самое?

StianSandberg

http://blog.nkadesign.com/2008/net-working-with-openoffice-3/

bluesathish

спасибо, Аллу,я попробую.

Espen Harlinn

5 ЕД! хм, кажется, кто - то прилагает усилия, чтобы понизить ваш голос-вероятно, плохой день для волос или что-то в этом роде: - D

StianSandberg

Спасибо, что снова проголосовали за меня :)

bluesathish

привет аллювиал, я попробовал вашу идею с помощью концепции closedxml, но получил следующую ошибку
Система.TypeInitializationException был пойман
Сообщение=инициализатор типа 'ClosedXML.В Excel.XLWorkbook " выбросил исключение.
Источник=ClosedXML
Имя_типа=ClosedXML.В Excel.XLWorkbook

Пожалуйста, помогите мне.

bluesathish

Мой исходный код был:
Частная суб DataTableToXLSX(бывал ДТ в качестве объекта DataTable)
Попробуй
Dim wb как новый XLWorkbook()
ВБ.Листы.Добавить(ДТ, ДТ.Имятаблицы.Метод toString)
ВБ.Сохранить как("Е:\" + ДТ.Имятаблицы.Метод toString() + "цифра")
Поймать ex как исключение
Ящик для сообщений.Шоу (напр.Метод toString())
Конец Попытки
Конец Подводной Лодки

bluesathish

Я решил вышеприведенную ошибку сам с собой, для этой вышеприведенной ошибки мы должны добавить еще один dll-файл DocumentFormat.OpenXml.dll в наше решение.
Большое спасибо аллювиалдепозиту.

Member 8345599

XLWorkbook не определен. Что же мне делать?

Рейтинг:
17

Aarti Meswania

Imports Microsoft
Imports Microsoft.Office.Interop


и добавьте ссылку dll " Microsoft.Офис.Взаимодействие.Превосходить"

функция экспорта данных приведена ниже

''' <summary>
    ''' Write Excel file as given file name with given data.
    ''' </summary>
    ''' <param name="a_sFilename">full file name for create excel file.</param>
    ''' <param name="a_sData">data in dataset to be fill in excel shhet.</param>
    ''' <param name="a_sFileTitle">Title of Excel file.</param>
    ''' <param name="a_sErrorMessage">output parameter contains error message if error occurrs.</param>
    ''' <returns>bool</returns>
    Public Function ExportToExcel(ByVal a_sFilename As String, ByVal a_sData As DataSet, ByVal a_sFileTitle As String, ByRef a_sErrorMessage As String) As Boolean
        a_sErrorMessage = String.Empty
        Dim bRetVal As Boolean = False
        Dim dsDataSet As DataSet = Nothing
        Try
            dsDataSet = a_sData

            Dim xlObject As Excel.Application = Nothing
            Dim xlWB As Excel.Workbook = Nothing
            Dim xlSh As Excel.Worksheet = Nothing
            Dim rg As Excel.Range = Nothing
            Try
                xlObject = New Excel.Application()
                xlObject.AlertBeforeOverwriting = False
                xlObject.DisplayAlerts = False

                ''This Adds a new woorkbook, you could open the workbook from file also
                xlWB = xlObject.Workbooks.Add(Type.Missing)
                xlWB.SaveAs(a_sFilename, 56, Missing.Value, Missing.Value, Missing.Value, Missing.Value, _
                Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value)

                xlSh = DirectCast(xlObject.ActiveWorkbook.ActiveSheet, Excel.Worksheet)

                'Dim sUpperRange As String = "A1"
                'Dim sLastCol As String = "AQ"
                'Dim sLowerRange As String = sLastCol + (dsDataSet.Tables(0).Rows.Count + 1).ToString()

                For j = 0 To dsDataSet.Tables(0).Columns.Count - 1
                    xlSh.Cells(1, j + 1) = _
                        dsDataSet.Tables(0).Columns(j).ToString()
                    xlSh.Cells(1, j + 1).Font.Bold = True
                Next

                For i = 1 To dsDataSet.Tables(0).Rows.Count
                    For j = 0 To dsDataSet.Tables(0).Columns.Count - 1
                        xlSh.Cells(i + 1, j + 1) = _
                            dsDataSet.Tables(0).Rows(i - 1)(j).ToString()
                    Next
                Next
                xlSh.Columns.AutoFit()
                'rg = xlSh.Range(sUpperRange, sLowerRange)
                'rg.Value2 = GetData(dsDataSet.Tables(0))

                'xlSh.Range("A1", sLastCol & "1").Font.Bold = True
                'xlSh.Range("A1", sLastCol & "1").HorizontalAlignment = XlHAlign.xlHAlignCenter
                'xlSh.Range(sUpperRange, sLowerRange).EntireColumn.AutoFit()
               
                If String.IsNullOrEmpty(a_sFileTitle) Then
                    xlObject.Caption = "untitled"
                Else
                    xlObject.Caption = a_sFileTitle
                End If

                xlWB.Save()
                bRetVal = True
            Catch ex As System.Runtime.InteropServices.COMException
                If ex.ErrorCode = -2147221164 Then
                    a_sErrorMessage = "Error in export: Please install Microsoft Office (Excel) to use the Export to Excel feature."
                ElseIf ex.ErrorCode = -2146827284 Then
                    a_sErrorMessage = "Error in export: Excel allows only 65,536 maximum rows in a sheet."
                Else
                    a_sErrorMessage = (("Error in export: " & ex.Message) + Environment.NewLine & " Error: ") + ex.ErrorCode
                End If
            Catch ex As Exception
                a_sErrorMessage = "Error in export: " & ex.Message
            Finally
                Try
                    If xlWB IsNot Nothing Then
                        xlWB.Close(Nothing, Nothing, Nothing)
                    End If
                    xlObject.Workbooks.Close()
                    xlObject.Quit()
                    If rg IsNot Nothing Then
                        Marshal.ReleaseComObject(rg)
                    End If
                    If xlSh IsNot Nothing Then
                        Marshal.ReleaseComObject(xlSh)
                    End If
                    If xlWB IsNot Nothing Then
                        Marshal.ReleaseComObject(xlWB)
                    End If
                    If xlObject IsNot Nothing Then
                        Marshal.ReleaseComObject(xlObject)
                    End If

                Catch
                End Try
                xlSh = Nothing
                xlWB = Nothing
                xlObject = Nothing
                ' force final cleanup!
                GC.Collect()
                GC.WaitForPendingFinalizers()
            End Try
        Catch ex As Exception
            a_sErrorMessage = "Error in export: " & ex.Message
        End Try

        Return bRetVal
    End Function


попробуйте этот код

Счастливого Кодирования!
:)


StianSandberg

этот код требует установки Office на сервере.

bluesathish

да, это не соответствует моим потребностям.

bluesathish

Привет, Арти, Спасибо за ваш ответ,у меня нет excel на моем компьютере .( прочитайте вопрос четко, прежде чем публиковать свои решения) Можете ли вы дать мне идею использовать открытые офисные сборки?

Aarti Meswania

Я не уверен. но просто попробуйте добавить ссылку на dll " Microsoft.Офис.Взаимодействие.Excel" в вашем проекте, если он успешно добавлен,
тогда, если у вас нет office, установленного на вашем компьютере, вы все равно сможете записывать данные в файл excel.
но вы просто не откроете этот файл напрямую.

bluesathish

он успешно добавлен в мой проект,но ему нужна ссылка Microsoft Excel COM. Я получил ошибки во время выполнения.

Aarti Meswania

какую ошибку вы получили?

bluesathish

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

Aarti Meswania

вы добавили "библиотеку объектов Microsoft Excel 12.0"?
путь есть C:\Windows\assembly\GAC\Microsoft.Офис.Взаимодействие.В Excel\12.0.0.0__71e9bce111e9429c\Майкрософт.Офис.Взаимодействие.Excel.dll

bluesathish

Это Microsoft.Офис.Взаимодействие.Путь Excel будет доступен только в том случае, если мы установим Msoffice, в противном случае у нас нет такого пути.

Aarti Meswania

ладно сегодня я тоже узнал кое что новое,
Я уже сказал, что не уверен в этом.,
Я обязательно попробую это сделать в свободное время.
спасибо за обмен опытом
если вы получите что-то новое по этой теме, пожалуйста, поделитесь
и прости, что не смог тебе помочь.

bluesathish

привет, Арти, решение alluvialdeposit было почти удовлетворено моим потребностям. Спасибо и за то, что поделились.

Espen Harlinn

Хм, противопоставить новичку ...

Aarti Meswania

что ты хочешь этим сказать?

Espen Harlinn

То, что два человека проголосовали 1 за ваши усилия, я не думаю, что они этого заслуживали.
Лично я бы решил эту проблему в соответствии с предложением AlluvialDeposits или использовал EPPlus: http://epplus.codeplex.com/

Aarti Meswania

Я не знаю, кто проголосовал против.,
Это не так важно, но главное-получить решение проблемы.
вывод темы был таков: "без установки MS-office на ПК нельзя читать-писать файлы excel с помощью vb.net-я лично не сталкивался с подобной ситуацией.
но я хотел бы испытать это, я также попробую ваши предложения аллювиальных отложений
спасибо,что проголосовали за мой ответ. :) Добрый день!

shaikh Khaja Peer

спасибо прекрасный пост

Aarti Meswania

добро пожаловать, дорогая! :)
Рад слышать, что этот пост был вам полезен! :)

Sarvesvara (BVKS) Dasa

Очень мило. Постараюсь этим воспользоваться.

Aarti Meswania

спасибо за чтение :)

Рейтинг:
1

jose_israel_17_

Public Function GridExport(ByVal DGV As DataGridView) As Boolean
    If DGV.RowCount > 0 Then
        Dim filename As String = Application.StartupPath & "\Export_" + Format(Now, "hhmmss").ToString + ".xls"
        DGV.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
        DGV.SelectAll()
        IO.File.WriteAllText(filename, DGV.GetClipboardContent().GetText.TrimEnd)
        DGV.ClearSelection()
        Process.Start(filename)
        Return True
    Else
        Return False
    End If
End Function


Richard MacCutchan

Этот вопрос был опубликован 4 года назад Пожалуйста, не воскрешайте мертвых вопросов.