70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
|
||||||
Как создать xls файл с заполненными данными?29.08.2016, 10:32. Показов 6525. Ответов 13
Метки нет Все метки)
(
на данный момент использую следующий код для создания xls файла и последующего его заполнения
даже если разбивать на этапы и создавать файлы десятками, то все равно это требует много времени и это при том, что у меня сильный комп переносил этот вариант на рабочий старый комп (2,2 гц проц, 1 гб озу), то там беда полная, более 7 сек уходит на 1 страницу, и чем дальше тем медленнее, бывает так чтобы оформить пятидесятую страницу, уходит более 30 сек можно ли создать файл так, чтобы при первом его открытии ячейки уже были заполнены? также прошу подскажите, может есть возможность сделать так чтобы шрифты/объединениеячеек/выравнивание и прочее тоже можно было изменить, не открывая при этом сам файл
1
|
29.08.2016, 10:32 | |
Ответы с готовыми решениями:
13
Как программно создать файл .xls???
|
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
|
||||||
29.08.2016, 14:26 [ТС] | ||||||
файл - это счета к оплате
в счете может быть от 1 до 3 услуг, поэтому счета имеют разные размеры (19, 21 или 23 строки) к тому же неизвестно какой счет будет первым и сколько их будет вообще поэтому шаблон мне не подходит я рассматривал вариант с сохранением данных в буфере обмена, разделял ячейки через табуляцию, потом вставлял в отформатированный пустой excel работает, но если пользователь вставляет не там где надо, или случайно добавляет/удаляет строки то сразу подозреваю будут "вопли/сопли почему не работает" к тому же в буфере не могу сохранить большой объем информации, и приходится делать это частями экономия времени мала Добавлено через 1 час 45 минут попробовал еще таким образом, но безуспешно
Дополнительные сведения: Невозможно привести COM-объект типа "Microsoft.Office.Interop.Excel.Workshee tClass" к интерфейсному типу "Microsoft.Office.Interop.Excel._Workshe et". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{000208D8-0000-0000-C000-000000000046}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
29.08.2016, 14:29 | |
из вашего разъяснения я нн понял структуры самого файла xls... вы б показали пример.
Добавлено через 2 минуты а ошибка ууазывает на несоотвеьсвие типов. Если вы используете позднее связывание, то типы переменных не нужно ууазывать, дабы не ошибится. Поограмма сама присвоит соответствующий тип каждой.
0
|
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
|
|
29.08.2016, 14:40 [ТС] | |
честно скажу, я не профи в программировании, самоучка и неопытен
не все понимаю с ваших слов, например если можно, то в виде кода это показать и вот файл, который формируетсяКнига.xls
0
|
![]() 1082 / 912 / 213
Регистрация: 29.09.2015
Сообщений: 1,015
|
||||||
29.08.2016, 20:37 | ||||||
Вот есть некоторые нюансы по производительности при заполнении:
Работу ускорит ExcelApp.Visible = False, а соответственно при этом не будет перерендеринга окна. После заполнения можно включить. Также с ExcelApp.ScreenUpdating = False. При этом окно не пропадает, но только картинка не обновляется. По завершению переключить на True. Есть быстрый способ заполнения при передачи двумерных массивов. У меня огромные массивы влетали за секунду
Насчет стилей подсказать не могу
2
|
03.09.2016, 01:02 | ||||||||||||||||
Решил проанализировать скорость формирования документа, который представляет собой список счетов (вариант ТС). Выделяется три блока счетов, которые заполняются из таблицы с базовой информацией и копируются в окончательный документ. Рассмотрены два варианта:
1. С использованием Microsoft.Office.Interop.Excel (формат файла xls) 2. С использованием библиотеки EPPlus (формат файла xlsx) Получены следующие результаты:
1. Вполне можно ограничиться использованием одного типа блока (неиспользуемая строка остается пустой). 2. Если полученные результаты не устраивают, то от использования формата Excel придется отказаться и формировать счета непосредственно в программе с выводом на печать (в файл). Это конечно достаточно хлопотно. 3. Окончательную компиляцию выполняйте в конфигурации Release.
3
|
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
|
|
03.09.2016, 16:01 [ТС] | |
интересный вариант заполнения
тут же остается вопрос, каким способом вы определяли как должен выглядеть счет? какие и сколько видов услуг? как быть если в счет попадает одноразовая услуга с другим названием? как быть если услуг более 5 видов? создавать новые готовые блоки и для каждого раза новые (потому что разные услуги)? и глядя на тот факт что 3000 листов формируются за 5 минут придется подстраиваться под именно этот вариант в связи с этим прошу Вас ответить еще на пару вопросов 1. за счет чего файл настолько быстро формируется? 2. будет ли работать библиотека на конечной машине (win XP .NET 4.0, MS Office 2003 и 2010)? 3. насколько сильно синтаксис этой библиотеки отличается от VBA? 4. чем лучше эта библиотека, чем та что встроена в VS 2105?
0
|
03.09.2016, 18:11 | |
kritjara,
Как я уже писал, в данном случае меня интересовала скорость заполнения документа типа предложенного вами образца. Какие услуги и сколько их может быть, речи не было, как не было и внятной постановки задачи. Исходя из здравого смысла, могу предположить, что источником информации является база данных, в которой и хранится вся информация по видам и количеству услуг привязанных к конкретному клиенту. В прилагаемых проектах вид счета определяется тремя шаблонами счета (исходя из приложенного вами образца). Если услуг много? Для начала стоит определить число услуг имеющих максимальную частоту среди всех возможных вариантов. Например, максимальное число услуг для одного клиента 10, а с максимальной частотой – 5. тогда я бы завел три блока шаблона счета: с тремя строками в счете, с пятью и с десятью. Напомню, все имена услуг и их количественные характеристики берутся из базы. Если в базе находим клиента, к которому привязаны две услуги то выбираем шаблон 1 и заполняем первые две строки в счете, третья остается пустой и т.д. сканируем базу по всем клиентам и выбираем подходящий шаблон. То, что в счете могут оставаться пустые строки не является криминалом. Если хотите, чтобы таких счетов было меньше увеличьте число шаблонов. Отвечу на ваши вопросы: 1. См. проект 2. Если речь идет о EPPlus то Net 4.0 вполне достаточно, при формировании файла MSOffice никак не участвует, т.е. Office может вообще отсутствовать. Но для просмотра файла Excel (7, 10) потребуется (но и в Excel2003 этот файл также можно просмотреть). 3. Этот синтаксис определяется Open XML SDK, хотя какие-то аналогии с Excel VBA, наверное, можно провести. 4. Не понял, о какой встроенной в VS библиотеке идет речь.
0
|
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
|
|
04.09.2016, 10:09 [ТС] | |
ovva, правильно ли я вас понял?
под шаблоном имеется ввиду Range отформатированный (с объединенеями ячеек, отрисованными таблицами и заполненной шапкой: реквизиты) для меня важно динамическое выполнение кода, если я правильно вас понял, то шаблоны можно заставить создаваться кодом Добавлено через 9 минут Microsoft.Office.Interop.Excel не буду загадывать хуже или лучше она чем EPPlus, но ваша разница во времени заполнения xls и xlsx может быть изза разницы форматов, одни и те же табличные данные в разных форматах занимают совершенно разное место на диске какие явные плюсы об этой библиотеке вы можете привести помимо того что установка офиса не требуется? и работает ли библиотека с .docx? насколько я понял, то нет, если правильно понял
0
|
Модератор
![]() ![]() 4323 / 3397 / 507
Регистрация: 27.01.2014
Сообщений: 6,197
|
|
04.09.2016, 10:23 | |
kritjara, Microsoft.Office.Interop.Excel это не встроенная в студию библиотека, и она не работает с самим файлом, а работает с объектом программы Excel, а уже эксель работает с вашим файлом, тоесть вы передаете экселю команды, а он уже их выполняет, а вот EPPlus работает с самим файлом, от этого и скорость, будто вы напрямую читаете строки файла и так далее.
1
|
04.09.2016, 13:14 | |
kritjara,
1. Да, см. файл tAccount.xlsx лист Blocks. 2. Непонятно что вы вкладываете в "динамическое выполнение кода". Эти блоки шаблонов можно сформировать и в коде, только зачем. Смысла в этом никакого тем более если вдруг шаблон нужно поменять, то на листе Excel это можно сделать без проблем. 3. Yury Komar, этот пункт уже разъяснил. 4. Форматы xls и xlsx различаются принципиально. Файл xlsx это фактически архив. Вы можете установить у такого файла расширение zip, открыть архив и посмотреть, что в него входит. 5. EPPlus с docx не работает. Но есть другие библиотеки, работающие с этими файлами на той же базовой основе (Open XML), например DocX (http://docx.codeplex.com).
1
|
![]() 179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
04.12.2016, 13:40 | |
kritjara, я попробовал создать xls файл указанным Вами способом, но у меня ничего не получилось.
Ссылку COM | Microsoft Office 10.0 Object Library подключил. Наверное нужно ещё что-то. С уже созданным файлом xls работать получается, а вот создать его из проекта Windows Form пока не выходит ![]()
0
|
04.12.2016, 13:40 | ||||||
Помогаю со студенческими работами здесь
14
Создать файл xls Создать новый xls файл
Можно ли с пом. ASP-скрипта создать и заполнить .xls файл Создать wav файл имея raw файл с данными Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. )
В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
|
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
|
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
|
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
|
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
|
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
|
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
|
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
|
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
|
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
|