Рейтинг:
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
спасибо за чтение :)