Member 11039558 Ответов: 2

Более быстрый способ экспорта данных из datagridview в excel VB.Net


Привет,

У меня есть этот ниже код, используемый при экспорте содержимого datagridview в excel с помощью VB.Чистая и прекрасно работает. Однако при работе со многими записями, например 300 записей, требуется время, прежде чем процесс экспорта будет завершен.


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


Ваша помощь будет очень признательна. Заранее спасибо.


Private Sub bt_export_Click(отправитель как система.Объект, как система.EventArgs) обрабатывает bt_export.Щелчок

Попробуй

Если tb_count.Тогда Text = "0"
Ящик для сообщений.Show("ничего не экспортируется в файл excel. Процесс экспорта отменяется", "экспорт в Excel", кнопки MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)
Еще
Попробуй
Указатель.Ток = Курсоры.WaitCursor
ProgressBar1.Видимое = Истинное
lb_pcnt.Видимое = Истинное
lb_pcnt.Текст = ProgressBar1.Значение.ToString("p")
ProgressBar1.Minimum = 0
ProgressBar1.Максимум = Вал(tb_count.Текст)

Dim xlApp как Microsoft.Офис.Взаимодействие.Превосходить.Приложение
Тусклый xlWorkBook как Microsoft.Офис.Взаимодействие.Превосходить.Рабочая тетрадь
Dim xlWorkSheet как Microsoft.Офис.Взаимодействие.Превосходить.Рабочий лист
Dim misValue как объект = система.Отражение.Недостающий.Ценность
Dim i как целое число
Dim j как целое число
Dim lMyArray(2, 1) As Long

xlApp = новый Microsoft.Офис.Взаимодействие.Превосходить.Приложение
xlWorkBook = xlApp.Workbooks.Добавить(неверное значение)
xlWorkSheet = xlWorkBook.Sheets("лист1")

Для i = 0 - DGV.Количество строк - 1
Для j = 0 - DGV.ColumnCount - 1
Для k как целого числа = 1 до DGV.Столбцы.Рассчитывать
xlWorkSheet.Ячейки(1, k) = DGV.Столбцы(k - 1).HeaderText
xlWorkSheet.Ячейки(i + 2, j + 1) = DGV(j, i).значение.Метод toString()
Следующий
Следующий

ProgressBar1.Value += 1
lb_pcnt.Текст = Формат(ProgressBar1.Значение / (tb_count.Текст), "п")
Следующий
С xlWorkSheet.Диапазон("A1", "BB1")
.Шрифт.Жирный = Истина
.Поле HorizontalAlignment = Эксел.XlVAlign.xlVAlignCenter
Конец С
xlWorkSheet.Диапазон("A1", "BB1").весь столбец.автоподбор()
Если lb_1.Text = "empl" тогда
xlWorkSheet.Сохранить как("база данных вывода c:\expat \\эмигранта - Assignees_" &амп; lb_time2.Текст и amp; ".XLSX-файл")
Ключевые слова elseif lb_1.Text = "empl2" тогда
xlWorkSheet.Сохранить как("база данных вывода c:\expat \\эмигранта - бизнес Travelers_" &амп; lb_time2.Текст и amp; ".XLSX-файл")
Еще
xlWorkSheet.Сохранить как("база данных вывода c:\expat \\налогов эмигранта - Assignees_" &амп; lb_time2.Текст и amp; ".XLSX-файл")
Конец, Если
xlWorkBook.Закрывать()
xlApp.Бросить()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)

Поймать ex как исключение

Конец Попытки

Dim res как MsgBoxResult

res = MsgBox("процесс завершен, вы хотите открыть файл?", MsgBoxStyle.Да нет)

If (res = MsgBoxResult.Да) Тогда
Если lb_1.Text = "empl" тогда
Процесс."Пуск" ("база данных вывода c:\expat \\эмигранта - Assignees_" &амп; lb_time2.Текст и amp; ".XLSX-файл")
Ключевые слова elseif lb_1.Text = "empl2" тогда
Процесс."Пуск" ("база данных вывода c:\expat \\эмигранта - бизнес Travelers_" &амп; lb_time2.Текст и amp; ".XLSX-файл")
Еще
Процесс.Начало("C:\Expat база данных\выходные данные\налоги экспатов - Назначений_" & lb_time2.Text & ".xlsx")
Конец, Если


Конец, Если

ProgressBar1.Значение = ProgressBar1.Минимальная
lb_pcnt.Текст = ProgressBar1.Значение.ToString("p")
ProgressBar1.Видна = Ложь
lb_pcnt.Видна = Ложь

Конец, Если

Поймать ex как исключение

Ящик для сообщений.Show("No connection.", "Authentication Error", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка)

Конец Попытки

Конец Подводной Лодки

2 Ответов

Рейтинг:
2

Suroj Karmacharya

Imports Excel = Microsoft.Office.Interop.Excel

Public Sub SaveGridToExcel(ByVal DGV As DataGridView)
    If DGV.Rows.Count > 0 Then
        Dim filename As String = ""
        Dim SV As SaveFileDialog = New SaveFileDialog()
        SV.Filter = "EXCEL FILES|*.xlsx;*.xls"
        Dim result As DialogResult = SV.ShowDialog()

        If result = DialogResult.OK Then
            filename = SV.FileName
            Dim multiselect As Boolean = DGV.MultiSelect
            DGV.MultiSelect = True
            DGV.SelectAll()
            DGV.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
            Clipboard.SetDataObject(DGV.GetClipboardContent())
            Dim results = System.Convert.ToString(Clipboard.GetData(DataFormats.Text))
            DGV.ClearSelection()
            DGV.MultiSelect = multiselect
            Dim XCELAPP As Microsoft.Office.Interop.Excel.Application = Nothing
            Dim XWORKBOOK As Microsoft.Office.Interop.Excel.Workbook = Nothing
            Dim XSHEET As Microsoft.Office.Interop.Excel.Worksheet = Nothing
            Dim misValue As Object = System.Reflection.Missing.Value
            XCELAPP = New Excel.Application()
            XWORKBOOK = XCELAPP.Workbooks.Add(misValue)
            XCELAPP.DisplayAlerts = False
            XCELAPP.Visible = False
            XSHEET = XWORKBOOK.ActiveSheet
            XSHEET.Paste()
            XWORKBOOK.SaveAs(filename, Excel.XlFileFormat.xlOpenXMLWorkbook)
            XWORKBOOK.Close(False)
            XCELAPP.Quit()

            Try
                System.Runtime.InteropServices.Marshal.ReleaseComObject(XSHEET)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(XWORKBOOK)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(XCELAPP)
            Catch
            End Try
        End If
    End If
End Sub


Рейтинг:
1

Sergey Alexandrovich Kryukov

Вместо использования сборки Interop вы можете попробовать альтернативный метод, который даже не требует установки Office (или Excel): используйте Open XML SDK.
Пожалуйста, смотрите мой прошлый ответ, где я ссылался на другие ответы и хорошую статью CodeProject (последняя ссылка): Как добавить библиотеку объектов microsoft excel 15.0 из Add Reference в MS Visual Studio 2010[^].

—СА