powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Примеры формирования отчета в Excell из visual basic
9 сообщений из 9, страница 1 из 1
Примеры формирования отчета в Excell из visual basic
    #38869054
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Помогите, пожалуйста, своими наработками и советами.
Стоит задача формировать отчет в excell из программы, написаной на vb. Отчеты получаются достаточно большие по содержанию.
Сейчас сделал следующий вариант (см. ниже), но у него есть несколько недостатков:
1. достаточно медленно формируется отчет
2. Если во время формирования сделать активным окно экселя, то выскакивает ошибка.
3. нет прогресс бара при формировании отчета.
Область, куда вставлять данные и которую нужно размножать до необходимого количества называю как Lblock1
Ячейки, куда нужно вставлять информацию помечаю примечанием по названию столбца в sql запросе, который возвращает данные для отчета.
Может кто поделится своими наработками на данную тему. Очень нужно сделать стабильный и шустрый вариант.
Заранее всем огромное спасибо!
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
 Sub PrintExcell(ByVal FTempl As String)
        Dim PathTemplate As String
        Dim PathTemp As String
        Dim Frep As String
        Dim XL As Object
        Dim LblockNum As String = "LBlock1"

        Dim Cn As String
        Dim I As Integer, J As Integer, X As Integer
        Dim cRow As Integer, cCol As Integer, mCol As Integer

        PathTemplate = "v:\Inversion\ufs\"
        PathTemp = "u:\Temp\"
        Frep = PathTemp & FTempl
        FTempl = PathTemplate & FTempl
        If Not My.Computer.FileSystem.FileExists(FTempl) Then
            MsgBox("Нет шаблона")
            Exit Sub
        Else
            If Check_Free_File(FTempl, Frep) = False Then
                Exit Sub
            Else
                If Not My.Computer.FileSystem.FileExists(Frep) Then
                Else

                    XL = ldObjExcel(Frep)
                    With XL
                        .Workbooks.Open(FileName:=Frep)
                        .Worksheets(1).Activate()
                        .ScreenUpdating = True
                        .Visible = False
                    End With

                    XL.Application.Range(LblockNum).Select()
                    cRow = XL.Selection.Row
                    mCol = XL.Application.Range(LblockNum).Columns.Count
                    If mCol > 100 Then mCol = 100
                    XL.ActiveSheet.Rows(cRow + 1 & ":" & cRow + 1).Select()
                    Dim Comm As New OleDb.OleDbCommand(Sql, Connect)
                    Dim DR As OleDbDataReader
                    DR = Comm.ExecuteReader()
                    I = 0
                    ReDim MRes(0, 0)
                    While DR.Read()
                        If I > 0 Then
                            XL.Selection.Insert()
                        End If
                        ReDim Preserve MRes(DR.FieldCount - 1, I)
                        For X = 0 To DR.FieldCount - 1
                            If IsDBNull(DR(X)) Then
                                MRes(X, I) = Nothing
                            Else
                                MRes(X, i) = DR(X)
                            End If
                        Next
                    End While
                    DR.Close()
                    DR = Comm.ExecuteReader()
                    I = 0
                    While DR.Read()
                        For cCol = 1 To mCol
                            Cn = ""
                            For J = 0 To DR.FieldCount - 1
                                If Not XL.ActiveSheet.Cells(cRow, cCol).Comment Is Nothing Then
                                    Cn = UCase(XL.ActiveSheet.Cells(cRow, cCol).Comment.Text)
                                End If
                                If Cn = UCase(DR.GetName(J)) Then
                                    If Not IsDBNull(DR.Item(J)) Then
                                        XL.ActiveSheet.Cells(cRow + I, cCol).Value = DR.Item(J)
                                    Else
                                        XL.ActiveSheet.Cells(cRow + I, cCol).Value = ""
                                    End If
                                End If
                            Next
                        Next
                        I = I + 1
                    End While
                    DR.Close()
                    DR = Nothing
                    Comm = Nothing
                    XL.visible = True
                End If
            End If
        End If
    End Sub
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869119
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Karlus1. достаточно медленно формируется отчета) По возможности формировать массив в памяти и потом вставлять на лист. Это быстрее, чем к каждой ячейке
б) Вставлять из БД с помощью CopyFromRecordset
в) Избавиться от Select: http://www.sql.ru/faq/faq_topic.aspx?fid=4344
г) Отключать ScreenUpdating на время формирования отчета
Karlus2. Если во время формирования сделать активным окно экселя, то выскакивает ошибка.не работать с ActiveWorkbook - Workbooks.Open возвращает ссылку на конкретную книгу. Не работать с Select (см. выше)Karlus3. нет прогресс бара при формировании отчета.Что мешает сделать?
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869164
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proв) Избавиться от Select: http://www.sql.ru/faq/faq_topic.aspx?fid=4344

Спасибо за инфу, сейчас переделаю.
Shocker.ProЧто мешает сделать?
А вот как это сделать? Взять за 100% количество строк массива и выводить в окно %% заполнения? Тут тогда вопрос как правильно создать это окно сообщения чтобы оно висело над экселем и все время обновлялось?
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869175
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KarlusСпасибо за инфу, сейчас переделаю.переделать надо не только пункт в. Как раз остальные пункты более эффективны.

KarlusА вот как это сделать? Взять за 100% количество строк массива и выводить в окно %% заполнения? Тут тогда вопрос как правильно создать это окно сообщения чтобы оно висело над экселем и все время обновлялось?А зачем ему вообще висеть над Экселем? Не показывай вообще Эксель, пока не готов отчет, показывай окно с прогресс-индикатором.

Кстати, почему в принципе выбран Interop, а не OpenXML SDK?
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869196
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProКстати, почему в принципе выбран Interop, а не OpenXML SDK?
Просто где-то взял пример, т.к. требовалось срочно реализовать формирование отчета. Но, т.к. сейчас размер отчетов и их количество увечилось и все встало на рельсы постоянного использования, вот и решил поспрашивать совета и идей у профессионалов. Может кто поделится идеями, опытом и кодом)
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869205
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда лучше перейти на OpenXML SDK
Это если нужно формировать принципиально экселевский файл

Если это не принципиально, существует множество движков отчетов
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869260
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТогда лучше перейти на OpenXML SDK
Это если нужно формировать принципиально экселевский файл
Если это не принципиально, существует множество движков отчетов
В том-то и дело что отчет нужен именно в эксель формировать.
Может есть примеры работы с OpenXML SDK?
Начал читать про него, но время время уйдет прилично, насколько я понял)
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869269
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KarlusМожет есть примеры работы с OpenXML SDK? есть, но не здесь, а в форуме по .NET. Здесь обсуждается Visual Basic, а не VB.NET
...
Рейтинг: 0 / 0
Примеры формирования отчета в Excell из visual basic
    #38869438
Karlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Попробую там поспрашивать.
Если у кого есть примеры на vb по формированию отчетов в excell, поделитесь, пожалуйста. Может найдется альтернативное решение. пока изучаю OpenXML
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Примеры формирования отчета в Excell из visual basic
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]