С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
1

Как создать xls файл с заполненными данными?

29.08.2016, 10:32. Показов 6450. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
на данный момент использую следующий код для создания xls файла и последующего его заполнения
VB.NET
1
2
3
4
5
6
Dim ExcelApp As Excel.Application = CreateObject("Excel.Application")
Dim ExcelBook As Excel.Workbook = ExcelApp.Workbooks.Add
Dim xls As Excel.Worksheet = ExcelBook.ActiveSheet
ExcelApp.Visible = True
 
'цикл, заполняющий файл
но этот вариант плох тем что мне необходимо порой заполнять до 3000 страниц
даже если разбивать на этапы и создавать файлы десятками, то все равно это требует много времени и это при том, что у меня сильный комп
переносил этот вариант на рабочий старый комп (2,2 гц проц, 1 гб озу), то там беда полная, более 7 сек уходит на 1 страницу, и чем дальше тем медленнее, бывает так чтобы оформить пятидесятую страницу, уходит более 30 сек

можно ли создать файл так, чтобы при первом его открытии ячейки уже были заполнены?
также прошу подскажите, может есть возможность сделать так чтобы шрифты/объединениеячеек/выравнивание и прочее тоже можно было изменить, не открывая при этом сам файл
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2016, 10:32
Ответы с готовыми решениями:

Как программно создать файл .xls???
Можт кто знает как из VB создать *.xls??? черканите...

Не появляется форма с заполненными данными
Доброго времени суток! Помогите разобраться в чем проблема, где нехватает? не срабатывает действие!...

Перенаправление с формы на таблицу с заполненными данными
Помогите пожалуйста! есть форма! ссылка на фому del ссылка на скачку формы .txt над...

Создать файл xls
Как программно создать файл xls, после создания я буду открыть его ... ExcelФайл =...

13
Модератор
Эксперт .NET
4317 / 3391 / 507
Регистрация: 27.01.2014
Сообщений: 6,188
29.08.2016, 11:16 2
а если не создавать а хранить шаблон в ресурсах.
далее его отрывать и заполнять пачкой а не построчно в цикле.
тоесть формировать массив строк и сбрасывать потом в ексель?
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
29.08.2016, 14:26  [ТС] 3
файл - это счета к оплате
в счете может быть от 1 до 3 услуг, поэтому счета имеют разные размеры (19, 21 или 23 строки)
к тому же неизвестно какой счет будет первым и сколько их будет вообще
поэтому шаблон мне не подходит

я рассматривал вариант с сохранением данных в буфере обмена, разделял ячейки через табуляцию, потом вставлял в отформатированный пустой excel
работает, но если пользователь вставляет не там где надо, или случайно добавляет/удаляет строки то сразу подозреваю будут "вопли/сопли почему не работает"
к тому же в буфере не могу сохранить большой объем информации, и приходится делать это частями
экономия времени мала

Добавлено через 1 час 45 минут
попробовал еще таким образом, но безуспешно
VB.NET
1
2
3
4
5
Dim ExcelApp As Excel.Application = CreateObject("Excel.Application")
Dim ExcelBook As Excel.Workbook = ExcelApp.Workbooks.Add
Dim xls As Excel.Worksheet = New Excel.Worksheet
' заполняю xls
ExcelBook.Worksheets.Add(xls)
выдается следующаи ошибка
Дополнительные сведения: Невозможно привести COM-объект типа "Microsoft.Office.Interop.Excel.WorksheetClass" к интерфейсному типу "Microsoft.Office.Interop.Excel._Worksheet". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{000208D8-0000-0000-C000-000000000046}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
0
Модератор
Эксперт .NET
4317 / 3391 / 507
Регистрация: 27.01.2014
Сообщений: 6,188
29.08.2016, 14:29 4
из вашего разъяснения я нн понял структуры самого файла xls... вы б показали пример.

Добавлено через 2 минуты
а ошибка ууазывает на несоотвеьсвие типов. Если вы используете позднее связывание, то типы переменных не нужно ууазывать, дабы не ошибится. Поограмма сама присвоит соответствующий тип каждой.
0
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
29.08.2016, 14:40  [ТС] 5
честно скажу, я не профи в программировании, самоучка и неопытен
не все понимаю с ваших слов, например
Цитата Сообщение от Yury Komar Посмотреть сообщение
Если вы используете позднее связывание, то типы переменных не нужно ууазывать, дабы не ошибится.
если можно, то в виде кода это показать

и вот файл, который формируетсяКнига.xls
0
Модератор
Эксперт .NET
4317 / 3391 / 507
Регистрация: 27.01.2014
Сообщений: 6,188
29.08.2016, 16:09 6
не объявляя переменных
VB.NET
1
2
3
Dim ExcelApp = CreateObject("Excel.Application")
Dim ExcelBook = ExcelApp.Workbooks.Add
Dim xls = ExcelBook.Worksheets.Add("New Worksheet")
0
1080 / 911 / 212
Регистрация: 29.09.2015
Сообщений: 1,014
29.08.2016, 20:37 7
Вот есть некоторые нюансы по производительности при заполнении:
Работу ускорит ExcelApp.Visible = False, а соответственно при этом не будет перерендеринга окна. После заполнения можно включить.
Также с ExcelApp.ScreenUpdating = False. При этом окно не пропадает, но только картинка не обновляется. По завершению переключить на True.
Есть быстрый способ заполнения при передачи двумерных массивов. У меня огромные массивы влетали за секунду
VB.NET
1
2
3
4
5
6
7
8
9
10
  dim arr(2,2) as String
 
        For i As Integer = 0 To 2
            For j As Integer = 0 To 2
                n += 1
                arr(j, i) = n.ToString
            Next
        Next
 
        oSheet.Range("A1").Resize(3, 3).Value  = arr ' вставка начинается с первой ячейки
Попробуйте по экспериментировать с последним вариантом.

Насчет стилей подсказать не могу
2
4684 / 3638 / 856
Регистрация: 02.02.2013
Сообщений: 3,496
Записей в блоге: 2
03.09.2016, 01:02 8
Решил проанализировать скорость формирования документа, который представляет собой список счетов (вариант ТС). Выделяется три блока счетов, которые заполняются из таблицы с базовой информацией и копируются в окончательный документ. Рассмотрены два варианта:
1. С использованием Microsoft.Office.Interop.Excel (формат файла xls)
2. С использованием библиотеки EPPlus (формат файла xlsx)
Получены следующие результаты:
Число счетовВариант xls (время в сек)Вариант xlsx (время в сек)
201.50.3
1004.50.6
500202.3
1000404.6
Замечания:
1. Вполне можно ограничиться использованием одного типа блока (неиспользуемая строка остается пустой).
2. Если полученные результаты не устраивают, то от использования формата Excel придется отказаться и формировать счета непосредственно в программе с выводом на печать (в файл). Это конечно достаточно хлопотно.
3. Окончательную компиляцию выполняйте в конфигурации Release.
Вложения
Тип файла: rar projects.rar (405.9 Кб, 47 просмотров)
3
70 / 60 / 16
Регистрация: 22.10.2012
Сообщений: 337
03.09.2016, 16:01  [ТС] 9
интересный вариант заполнения

тут же остается вопрос, каким способом вы определяли как должен выглядеть счет?
какие и сколько видов услуг? как быть если в счет попадает одноразовая услуга с другим названием?
как быть если услуг более 5 видов? создавать новые готовые блоки и для каждого раза новые (потому что разные услуги)?

и глядя на тот факт что 3000 листов формируются за 5 минут придется подстраиваться под именно этот вариант
в связи с этим прошу Вас ответить еще на пару вопросов
1. за счет чего файл настолько быстро формируется?
2. будет ли работать библиотека на конечной машине (win XP .NET 4.0, MS Office 2003 и 2010)?
3. насколько сильно синтаксис этой библиотеки отличается от VBA?
4. чем лучше эта библиотека, чем та что встроена в VS 2105?
0
4684 / 3638 / 856
Регистрация: 02.02.2013
Сообщений: 3,496
Записей в блоге: 2
03.09.2016, 18:11 10
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  [ТС] 11
ovva, правильно ли я вас понял?
под шаблоном имеется ввиду Range отформатированный (с объединенеями ячеек, отрисованными таблицами и заполненной шапкой: реквизиты)
для меня важно динамическое выполнение кода, если я правильно вас понял, то шаблоны можно заставить создаваться кодом

Добавлено через 9 минут
Цитата Сообщение от ovva Посмотреть сообщение
4. Не понял, о какой встроенной в VS библиотеке идет речь.
Microsoft.Office.Interop.Excel

не буду загадывать хуже или лучше она чем EPPlus, но ваша разница во времени заполнения xls и xlsx может быть изза разницы форматов, одни и те же табличные данные в разных форматах занимают совершенно разное место на диске

какие явные плюсы об этой библиотеке вы можете привести помимо того что установка офиса не требуется?
и работает ли библиотека с .docx? насколько я понял, то нет, если правильно понял
0
Модератор
Эксперт .NET
4317 / 3391 / 507
Регистрация: 27.01.2014
Сообщений: 6,188
04.09.2016, 10:23 12
kritjara, Microsoft.Office.Interop.Excel это не встроенная в студию библиотека, и она не работает с самим файлом, а работает с объектом программы Excel, а уже эксель работает с вашим файлом, тоесть вы передаете экселю команды, а он уже их выполняет, а вот EPPlus работает с самим файлом, от этого и скорость, будто вы напрямую читаете строки файла и так далее.
1
4684 / 3638 / 856
Регистрация: 02.02.2013
Сообщений: 3,496
Записей в блоге: 2
04.09.2016, 13:14 13
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 14
kritjara, я попробовал создать xls файл указанным Вами способом, но у меня ничего не получилось.
Ссылку COM | Microsoft Office 10.0 Object Library подключил. Наверное нужно ещё что-то. С уже созданным файлом xls работать получается, а вот создать его из проекта Windows Form пока не выходит
0
04.12.2016, 13:40
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2016, 13:40
Помогаю со студенческими работами здесь

Создать новый xls файл
Как создать новую Excel книгу(открывать не надо, просто создать её на жёстком диске)? - Если...

Создать простой xls файл
Пытаюсь создать (в ручную) простой xls файл для отправки данных по ссылке. Excel открывает файл...

Можно ли с пом. ASP-скрипта создать и заполнить .xls файл
Как на стороне сервера создать рабочую таблицу Excel (или документ Word) и заполнить его чем-либо?

Создать wav файл имея raw файл с данными
Всем хорошего настроения! Пишу программу для обработки аudio данных, и есть необходимость...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru