Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Формирование excell из шаблона / 11 сообщений из 11, страница 1 из 1
02.03.2015, 09:08
    #38892028
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Добрый день. У меня есть программа, написанная на visual basic 2013. Эта программа работает с базой данных Oracle. Возникла необходимость формировать из программы большие отчеты (порядка 100-200 тыс строк) в excell. Смысл в следующем, есть шаблонный файл, в котором есть шапка и помечены ячейки, в которые должны попадать данные. Нужно взять этот шаблон и заполнить данными вытащенными из базы при помощи sql запроса. Создавать подключение из фала не годится, т.к. файл после формирования должен быть абсолютно автономно.
Может у кого-нибудь есть опыт в данной области? Поделитесь, пожалуйста, опытом, кодом и советами!!!
Посоветовали рыть в стороны office open xml, но я что-то пока не нашел нормальных примеров. И не очень понял смысл работы с ним.
Может есть достойная альтернатива или есть примеры работы с open xml?
Буду очень признателен за участие и помощь.
...
Рейтинг: 0 / 0
02.03.2015, 09:16
    #38892034
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Karlusальтернатива
генераторы отчётов - любые
...
Рейтинг: 0 / 0
02.03.2015, 10:00
    #38892073
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Забыл добавить, программа сетевая. Запускается на большом количестве компьютеров. Поэтому желательно не использовать сторонний софт.
ИзопропилKarlusальтернатива
генераторы отчётов - любые
Какой генератор лучше использовать? Может есть примеры интеграции?
...
Рейтинг: 0 / 0
02.03.2015, 11:10
    #38892131
SerP1983
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Karlus,
SSRS, если Microsoft для вас не сторонний софт))
...
Рейтинг: 0 / 0
02.03.2015, 14:11
    #38892377
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
SerP1983Karlus,
SSRS, если Microsoft для вас не сторонний софт))
А есть примеры интеграции SSRS в проект visual studio?
...
Рейтинг: 0 / 0
02.03.2015, 19:03
    #38892772
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Karlus, гуглите по словам RDLC ReportViewer winforms (или что там у вас за клиент)...
Не уверен, что держать SSRS имеет смысл. Возможно локального процессинга вам хватит.
...
Рейтинг: 0 / 0
02.03.2015, 19:20
    #38892797
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
buserKarlus, гуглите по словам RDLC ReportViewer winforms (или что там у вас за клиент)...
Не уверен, что держать SSRS имеет смысл. Возможно локального процессинга вам хватит.
Спасибо, попробую посмотреть в этом направлении.

Если немного видоизменить задачу. В Visual Basic есть двумерный массив с данными (100,50). Какими средствами его можно запихнуть в Excel? На данный момент использую:
Код: 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.
   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


Но данный метод медленно заполняет екселевский лист. Может есть другие предложения?
...
Рейтинг: 0 / 0
02.03.2015, 19:25
    #38892804
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Karlusмедленноподготовить массив в памяти и вставить целиком. Это в разы быстрее, чем перебирать по одной ячейке.

Также помогает отключение обновления экрана (если эксель видимый) и пересчета формул (если на ячейки ссылаются формулы) на время выполнения скрипта
...
Рейтинг: 0 / 0
02.03.2015, 19:40
    #38892817
Karlus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Shocker.Proподготовить массив в памяти и вставить целиком. Это в разы быстрее, чем перебирать по одной ячейке.
А есть пример как подготовить массив в памяти и вставить целиком? Остальное понял, переделаю
...
Рейтинг: 0 / 0
02.03.2015, 19:47
    #38892821
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
А какой тут пример-то нужен?
Код: c#
1.
2.
3.
4.
5.
6.
Dim a(1, 1)
a(0, 0) = "a"
a(0, 1) = "b"
a(1, 0) = "c"
a(1, 1) = "d"
Range(Cells(1, 1), Cells(2, 2)) = a




И, да. Никогда не работайте с активной книгой или выделением - чревато - FAQ
...
Рейтинг: 0 / 0
03.03.2015, 05:53
    #38893059
Barkan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование excell из шаблона
Karlus,

Пользую NPOI.
Читает/пишет напрямую в файл XLS, без обращений к EXCEL.
Библиотека свободная, примеры кода присутствуют.
Из плюсов - пишет быстро (в некоторых случаях EXCEL дольше открывает этот файл, чем программа записывает).
Из минусов - при очень большом количестве записываемых в XLS данных "заваливается" - видимо по нехватке памяти.
С этим столкнулся один раз - пытался выгрузить в XLS сильно более 100 000 строк из базы.
Потом переосмыслили ситуацию и решили что оно и не надо - насиловать XLS и глаза пользователей.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Формирование excell из шаблона / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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