Генерация красивых Excel-отчётов по шаблону

ParadoxRU

Client
Регистрация
04.09.2019
Сообщения
19
Благодарностей
6
Баллы
3

ZSHab

Client
Регистрация
29.10.2014
Сообщения
220
Благодарностей
22
Баллы
18
LaGir, Спасибо за статью!
Может сталкивался кто-нибудь с похожей задачей?
Коротко: "Нужно сделать добавление данные в таблицы с ожиданием окончания записи"

Есть файл "Тест.xlsx"
Записываю в него данные. (больше 5 разных ячеек)
Следующим действием идёт отправка файла POST запросом.
Часто, так как отправка файла идёт сразу после действий по "записи данных", то файл отправляется без фактически записанных данных и после этого данные записываются на локальном файле. (а POST запросом отправился недописанный файл).

Как сделать ожидание записи всех данных в файл?

Заранее спасибо за помощь!
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113
LaGir, Спасибо за статью!
Может сталкивался кто-нибудь с похожей задачей?
Коротко: "Нужно сделать добавление данные в таблицы с ожиданием окончания записи"

Есть файл "Тест.xlsx"
Записываю в него данные. (больше 5 разных ячеек)
Следующим действием идёт отправка файла POST запросом.
Часто, так как отправка файла идёт сразу после действий по "записи данных", то файл отправляется без фактически записанных данных и после этого данные записываются на локальном файле. (а POST запросом отправился недописанный файл).

Как сделать ожидание записи всех данных в файл?

Заранее спасибо за помощь!
паузу поставь 60-90 секунд, должно хватить.
 
  • Спасибо
Реакции: ZSHab

ZSHab

Client
Регистрация
29.10.2014
Сообщения
220
Благодарностей
22
Баллы
18
паузу поставь 60-90 секунд, должно хватить.
Спасибо,
Phoenix78
Сделал дополнительную таблицу, которую "привязывал к файлу" и проверял фактическую запись данных в локальный файл.
По тестам, хватало до 30 - 40 секунд для записи.
 

nik-n

Client
Регистрация
05.11.2016
Сообщения
238
Благодарностей
19
Баллы
18
Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'ExcelPackage' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 34; Cтолбец: 8]

Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'ExcelPackage' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 34; Cтолбец: 34]

Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'ExcelWorksheet' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 37; Cтолбец: 2]

либа с гитхаба(тоже самое и с другими с других мест в том числе тут в теме на 1 странице кто то прикреплял dll готовый), не пойму че надо
Зенно Постерович v 7.4.0.0
 

Вложения

ZSharp

Client
Регистрация
29.09.2013
Сообщения
387
Благодарностей
121
Баллы
43
либа с гитхаба(тоже самое и с другими с других мест в том числе тут в теме на 1 странице кто то прикреплял dll готовый), не пойму че надо
Зенно Постерович v 7.4.0.0
Добавлена библиотека в "Ссылки из GAS"?
И прописаны using-и в "Директивы using и общий код"?
 

nik-n

Client
Регистрация
05.11.2016
Сообщения
238
Благодарностей
19
Баллы
18
Добавлена библиотека в "Ссылки из GAS"?
И прописаны using-и в "Директивы using и общий код"?
конечно

79991


79992


и сам dll в папку ExternalAssemblies тоже добавлен

не работает ни в моем шаблоне ни в шаблоне который в стартовом посте автор прикрепил. одна и та же ошибка.
 

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
11
Баллы
18
Ребят помогите человеку, не разбирающемуся в C#)

У меня основная задача - писать данные в нужном формате. Всякие красивости не нужны.
Я в цикле готовлю данные и потом пишу в таблицу сразу всю строку, например
{-Variable.date-}{-String.Tab-}{-Variable.var1-}{-String.Tab-}{-Variable.var2-}
в строке разные данные - и дата и простые числа и double

Подскажите как адаптировать код, чтобы записывать данные в нужном формате. Формат парсить не нужно, я могу указать в явном виде, структура таблицы не меняется.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 675
Благодарностей
1 855
Баллы
113
Я в цикле готовлю данные и потом пишу в таблицу сразу всю строку, например
{-Variable.date-}{-String.Tab-}{-Variable.var1-}{-String.Tab-}{-Variable.var2-}
в строке разные данные - и дата и простые числа и double
если ты работаешь с одним листом, так может тебе просто использовать CSV файл, тогда через разделитель формируешь строку и записываешь, как в обычный текстовый файл.
А при просмотре CSV файл можно открывать как таблицу указав разделитель при открытии файла. :az:
 

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
11
Баллы
18
если ты работаешь с одним листом, так может тебе просто использовать CSV файл, тогда через разделитель формируешь строку и записываешь, как в обычный текстовый файл.
А при просмотре CSV файл можно открывать как таблицу указав разделитель при открытии файла. :az:
Да у меня в этом же файле сводная хранится, данные постоянно прибавляются, в сводной анализирую. Если писать в CSV, то нужно будет пересохранять в xls, лишние действия.
 

braind

Client
Регистрация
10.10.2012
Сообщения
119
Благодарностей
11
Баллы
18
Ребят помогите человеку, не разбирающемуся в C#)

У меня основная задача - писать данные в нужном формате. Всякие красивости не нужны.
Я в цикле готовлю данные и потом пишу в таблицу сразу всю строку, например
{-Variable.date-}{-String.Tab-}{-Variable.var1-}{-String.Tab-}{-Variable.var2-}
в строке разные данные - и дата и простые числа и double

Подскажите как адаптировать код, чтобы записывать данные в нужном формате. Формат парсить не нужно, я могу указать в явном виде, структура таблицы не меняется.
Никто помочь не желает?)
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 675
Благодарностей
1 855
Баллы
113

che100

Client
Регистрация
18.04.2017
Сообщения
808
Благодарностей
499
Баллы
63
  • Спасибо
Реакции: ZSHab

stanar

Client
Регистрация
19.12.2015
Сообщения
314
Благодарностей
157
Баллы
43
Доброго дня. Подскажите, как в коде реализовать аналог нажатия этой вот кнопки?
93869
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 052
Баллы
93
Доброго дня. Подскажите, как в коде реализовать аналог нажатия этой вот кнопки?
Посмотреть вложение 93869
Насколько я помню, запуск макросов VBA с помощью C# (EPPlus) не возможен.
Можно только записывать, удалять и изменять. исток

Как вариант вы можете воспользоваться вот этим кодом, чтобы при открытии книги было автоматическое обновление всех связей. исток
Вот так можно записать макрос в таблицу. (пример внутри)
Обновление всех связей при открытии книги:
'Язык VBA (форум не поддерживает этот язык)

Private Sub Workbook_Open()
'Используйте метод RefreshAll
Workbooks(ThisWorkbook.Name).RefreshAll
End Sub
upd:
Как вариант можно попробовать ещё так, но это не во всех случаях подходит:
Перезагрузка таблицы:
project.Tables["BookName"].Reload();
Плюс не описан в zenno addemblies. =/
Очень надеюсь, что помог. :az:
 
Последнее редактирование:
  • Спасибо
Реакции: stanar

stanar

Client
Регистрация
19.12.2015
Сообщения
314
Благодарностей
157
Баллы
43
Насколько я помню, запуск макросов VBA с помощью C# (EPPlus) не возможен.
Можно только записывать, удалять и изменять. исток

Как вариант вы можете воспользоваться вот этим кодом, чтобы при открытии книги было автоматическое обновление всех связей. исток
Вот так можно записать макрос в таблицу. (пример внутри)
Обновление всех связей при открытии книги:
'Язык VBA (форум не поддерживает этот язык)

Private Sub Workbook_Open()
'Используйте метод RefreshAll
Workbooks(ThisWorkbook.Name).RefreshAll
End Sub
upd:
Как вариант можно попробовать ещё так, но это не во всех случаях подходит:
Перезагрузка таблицы:
project.Tables["BookName"].Reload();
Плюс не описан в zenno addemblies. =/
Очень надеюсь, что помог. :az:

Спасибо. Пользуюсь вот этим, но тяжелые запросы не всегда обновляет. Может времени не хватает, конечно. Думал в этой библиотеке есть что-то похожее
var path = project.Variables["path"].Value;
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.DisplayAlerts = false;
Workbook theWorkbook = excelApp.Workbooks._Open(path, 0, false, 5, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, true, false, System.Reflection.Missing.Value, false);
theWorkbook.RefreshAll();
 

Surok

Client
Регистрация
09.10.2018
Сообщения
23
Благодарностей
9
Баллы
3
Второй кубик из примера не запускается, выдает ошибку: "
Выполнение действия CSharp OwnCode: Генерация Excel. [Строка: 162; Cтолбец: 0] Не удалось загрузить файл или сборку "EPPlus, Version=4.1.0.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)"

Как-то можно победить или библиотека устарела?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 675
Благодарностей
1 855
Баллы
113
Второй кубик из примера не запускается, выдает ошибку: "
Выполнение действия CSharp OwnCode: Генерация Excel. [Строка: 162; Cтолбец: 0] Не удалось загрузить файл или сборку "EPPlus, Version=4.1.0.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)"

Как-то можно победить или библиотека устарела?
ругается на версию библиотеки. попробуйте другую версию. Новые версии могут выдавать ошибки
 

Surok

Client
Регистрация
09.10.2018
Сообщения
23
Благодарностей
9
Баллы
3
ругается на версию библиотеки. попробуйте другую версию. Новые версии могут выдавать ошибки
Пробовал все, что нашел на форуме.

Проблема с версией так решается: https://zennolab.com/discussion/threads/ne-sozdaetsja-excel-tablica.104712/#post-702775
Но там другая, пока не понимаю, как решить.
 

Duser

Client
Регистрация
11.08.2013
Сообщения
286
Благодарностей
192
Баллы
43
Часто получается, что строка, которая заносится в ячейку, длинная. Как в самом экселе сделать, так чтобы данные не вылазили за границу ячейки?
 

che100

Client
Регистрация
18.04.2017
Сообщения
808
Благодарностей
499
Баллы
63
Часто получается, что строка, которая заносится в ячейку, длинная. Как в самом экселе сделать, так чтобы данные не вылазили за границу ячейки?
shrink - ануть.
 
  • Спасибо
Реакции: Duser

lazy_bones

Client
Регистрация
16.10.2010
Сообщения
4
Благодарностей
0
Баллы
1
101028


Здравствуйте, подскажите пожалуйста, есть ли способ как то ускорить заполнение? В данном варианте отчет, примерно 60 тыс строк. Из приведенного сниппета убран второй лист и убрано распознавание дат, оставлено только распознавание целого и дробного числа. Отчет забирается по апишке, сам зеннопостер парсит его в таблицу примерно за 5 минут. И больше 4х часов происходит заполнение именно сниппетом. Причем эту же самую таблицу в 10 тыс строк, сниппет заполняет примерно за 10 минут.
 

Redsmokky

Client
Регистрация
06.10.2015
Сообщения
311
Благодарностей
195
Баллы
43
Подскажите как закрасить 1 ячейку, в шаблоне все через условия, не разобрался :D
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)