Создание excel файла javascript

Обновлено: 07.07.2024

В этой статье описано, как создавать надстройки для Excel 2016 или более поздней версии с помощью API JavaScript для Excel. В статье изложены основные принципы, которые являются фундаментальными при использовании этого API, а также имеются рекомендации по выполнению определенных задач, например чтению данных из большого диапазона или записи данных в него, изменения всех ячеек в диапазоне и много другого.

Сведения об асинхронном типе интерфейсов API Excel и принципах их работы с книгой см. в статье Использование модели API, зависящей от приложения.

Интерфейсы API Office.js для Excel

Надстройка Excel взаимодействует с объектами в Excel с помощью API JavaScript для Office, включающего две объектных модели JavaScript:

API JavaScript для Excel. Появившийся в Office 2016 API JavaScript для Excel предоставляет строго типизированные объекты, с помощью которых можно получать доступ к листам, диапазонам, таблицам, диаграммам и другим объектам.

Общие API. Появившиеся в Office 2013 общие API можно использовать для доступа к таким компонентам, как пользовательский интерфейс, диалоговые окна и параметры клиентов, общие для нескольких типов приложений Office.

Скорее всего, вы будете разрабатывать большую часть функций надстроек для Excel 2016 или более поздней версии с помощью API JavaScript для Excel, но вам также потребуются объекты из общего API. Например:

    . Объект Context представляет среду выполнения надстройки и предоставляет доступ к ключевым объектам API. Он состоит из данных конфигурации книги, например contentLanguage и officeTheme , а также предоставляет сведения о среде выполнения надстройки, например host и platform . Кроме того, он предоставляет метод requirements.isSetSupported() , с помощью которого можно проверить, поддерживается ли указанный набор обязательных элементов приложением Excel, в котором работает надстройка. . Объект Document предоставляет метод getFileAsync() , позволяющий скачать файл Excel, в котором работает надстройка.

На рисунке ниже показано, когда можно использовать API JavaScript для Excel или общие API.

Различия между API JS для Excel и общими API.

Объектная модель для Excel

Чтобы понять API-интерфейсы Excel, вы должны понимать, как компоненты рабочей книги связаны друг с другом.

  • Рабочая книга содержит одну или несколько рабочих листов.
  • Рабочий лист содержит коллекции тех объектов данных, которые присутствуют на отдельном листе, и предоставляет доступ к ячейкам с помощью объектов Range.
  • Range представляет группу смежных клеток.
  • Диапазоны используются для создания и размещения таблиц, диаграмм, фигур и других объектов визуализации данных или организации.
  • Рабочие книги содержат коллекции некоторых из этих объектов данных (таких как таблицы) для всей рабочей книги.

В API JavaScript для Excel нет объекта или класса Cell. Вместо этого API JavaScript для Excel определяет все ячейки Excel как объекты Range . Отдельные ячейки в пользовательском интерфейсе Excel преобразуются в объект Range с одной ячейкой в API JavaScript для Excel. Один объект Range также может содержать несколько смежных ячеек. Дополнительные сведения см. в статье Работа с ячейками с использованием API JavaScript для Excel.

Диапазоны

Диапазон - это группа непрерывных ячеек в рабочей книге. В надстройках обычно используется нотация в стиле A1 (например, B3 для отдельной ячейки в столбце B и строке 3 или C2:F4 для ячеек из столбцов с C по F и строк с 2 по 4) для определения диапазонов.

Диапазоны имеют три основных свойства: values , formulas , и format . Эти свойства получают или устанавливают значения ячеек, формулы для оценки и визуальное форматирование ячеек.

Образец диапазона

В следующем примере показано, как создавать записи продаж. Эта функция использует объекты Range для установки значений, формул и форматов.

В этом примере создаются следующие данные в текущем листе.

Запись о продажах, показывающая строки значений, столбец формулы и отформатированные заголовки.

Диаграммы, таблицы и другие объекты данных

API JavaScript для Excel могут создавать и управлять структурами данных и визуализациями в Excel. Таблицы и диаграммы являются двумя наиболее часто используемыми объектами, но API поддерживают сводные таблицы, фигуры, изображения и многое другое.

Создание таблицы

Создайте таблицы с помощью диапазонов данных. Форматирование и элементы управления таблицами (например, фильтры) автоматически применяются к диапазону.

В следующем примере создается таблица с использованием диапазонов из предыдущего примера.

Использование этого примера кода на листе с предыдущими данными создает следующую таблицу.

Таблица сделана из предыдущего рекорда продаж.

Создание диаграммы

Создайте диаграммы для визуализации данных в диапазоне. API поддерживают десятки разновидностей диаграмм, каждая из которых может быть настроена в соответствии с вашими потребностями.

В следующем примере создается простая гистограмма для трех элементов, которая размещается на 100 пикселей ниже верхней части листа.

Выполнение этого примера на листе с предыдущей таблицей создает следующую диаграмму.

I am a nodejs programmer . Now I have a table of data that I want to save in Excel File format . How do I go about doing this ?

I found a few Node libraries . But most of them are Excel Parsers rather than Excel Writers .I am using a Linux Server . Hence need something that can run on Linux . Please let me know if there are any helpful libraries that you know of .

Or is there a way I can convert a CSV file to an xls file ( programmatically ) ?


8,166 18 18 gold badges 52 52 silver badges 82 82 bronze badges

11 Answers 11

excel4node is a maintained, native Excel file creator built from the official specification. It's similar to, but more maintained than mxexcel-builder mentioned in the other answer.

88.1k 78 78 gold badges 335 335 silver badges 415 415 bronze badges @mikemaccana is there any posssible way to export array list. @tamilselvans Use an array.forEach(value, index) and worksheet.cell(column, row).string(value) . Bette yet read the docs!

I just figured a simple way out . This works -

Just create a file with Tabs as delimiters ( similar to CSV but replace comma with Tab ). Save it with extension .XLS . The file can be opened in Excel .

Some code to help --

This creates the file in XLS file format . It doesnt work if you try XLSX instead of XLS .


8,166 18 18 gold badges 52 52 silver badges 82 82 bronze badges Why not use commas and create a CSV file with node and then import it into Excel? This way Excel can do its thing and create the xls/xlsx file properly. This does not answer the question at all, as it is not an excel file.

Use msexcel-builder. Install it with:

88.1k 78 78 gold badges 335 335 silver badges 415 415 bronze badges


4,103 2 2 gold badges 18 18 silver badges 23 23 bronze badges Can I pipe the result file to a Response object instead of saving to a disk? I am getting this warning in console when run their sample code from npm: (node:11702) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.

Although this question has several answers, they may now be a little dated.

New readers may prefer to consider the xlsx or "sheetsJS" package, which now seems to now be by far the most popular node package for this use case.

The current top answer recommends excel4node , which does look quite good - but the latter package seems less maintained (and far less popular) than the former.

Answering the question directly, using xlsx:

For some people excel4node will be easier to grasp, especially if you come from the JQuery world were you chain things. But JQuery is dying for a good reason and XLSX is a much cleaner way of doing things, and gives alot more control.

You should check ExcelJS

Works with CSV and XLSX formats.

Great for reading/writing XLSX streams. I've used it to stream an XLSX download to an Express response object, basically like this:

Works great for large files, performs much better than excel4node (got huge memory usage & Node process "out of memory" crash after nearly 5 minutes for a file containing 4 million cells in 20 sheets) since its streaming capabilities are much more limited (does not allows to "commit()" data to retrieve chunks as soon as they can be generated)

В этой статье приведены примеры кода, в которых показано, как выполнять стандартные задачи для книг с использованием API JavaScript для Excel. Полный список свойств и методов, поддерживаемых объектом, см. в книге Workbook Объект (API JavaScript для Excel). В этой статье также рассматриваются действия на уровне книги, выполняемые с помощью объекта Application.

Объект Workbook — это точка входа для вашей надстройки для взаимодействия с Excel. Он поддерживает коллекции листов, таблиц, сводных таблиц и других элементов, через которые выполняется доступ и изменение данных Excel. Объект WorksheetCollection предоставляет надстройке доступ ко всем данным книги с помощью отдельных листов. В частности, он позволяет надстройке добавлять листы, перемещаться между ними и назначать обработчиков событий листа. В статье Работа с листами с использованием API JavaScript для Excel описывается способ доступа к листам и их изменение.

Получение активной ячейки или выделенного диапазона

Объект Workbook содержит два метода для получения диапазона ячеек, выделенных пользователем или надстройкой: getActiveCell() и getSelectedRange() . getActiveCell() получает активную ячейку из книги в виде объекта Range. В приведенном ниже примере показан вызов getActiveCell() с последующей печатью адреса ячейки в консоль.

Метод getSelectedRange() возвращает один диапазон, выделенный в настоящее время. Если выделено несколько диапазонов, возникает ошибка InvalidSelection. В приведенном ниже примере показан вызов метода getSelectedRange() , который затем устанавливает желтый цвет заливки для диапазона.

Создание книги

Ваша надстройка может создать новую книгу, отдельную от экземпляра Excel, в котором в настоящее время работает надстройка. Для этой цели в объекте Excel имеется метод createWorkbook . При вызове этого метода сразу открывается и отображается новая книга в новом экземпляре программы Excel. Ваша надстройка остается открытой и запущенной в предыдущей книге.

С помощью метода createWorkbook также можно создать копию существующей книги. Метод принимает в качестве необязательного параметра строковое представление XLSX-файла в кодировке base64. Полученная книга будет копией этого файла, предполагая, что строковый аргумент является допустимым XLSX-файлом.

Текущую книгу надстройки можно получить в качестве строки с кодом base64 с помощью нарезки файлов. Преобразование файла в нужную строку в кодировке base64 можно выполнить с помощью класса FileReader, как показано в приведенном ниже примере.

Вставка копии существующей книги в текущую книгу.

В предыдущем примере показана новая книга, которая была создана из существующей книги. Вы также можете скопировать отдельные части или всю существующую книгу целиком в книгу, привязанную в настоящее время к вашей надстройке. В книге используется метод вставки копий таблиц целевой книги insertWorksheetsFromBase64 в себя. Файл другой книги передается как строка с кодом base64, как и Excel.createWorkbook вызов.

Метод insertWorksheetsFromBase64 поддерживается для Excel на Windows, Mac и в Интернете. Он не поддерживается для iOS. Кроме того, Excel в Интернете этот метод не поддерживает исходные таблицы с элементами PivotTable, Chart, Comment или Slicer. Если эти объекты присутствуют, метод возвращает insertWorksheetsFromBase64 UnsupportedFeature ошибку в Excel в Интернете.

В следующем примере кода показано, как вставить в текущую книгу таблицы из другой книги. Этот пример кода сначала обрабатывает файл книги с объектом и извлекает строку с кодом base64, а затем вставляет эту строку с кодом base64 в текущую FileReader книгу. Новые листы вставляются после листа с именем Sheet1. Обратите внимание, что он передается в качестве параметра свойства [] InsertWorksheetOptions.sheetNamesToInsert. Это означает, что все таблицы из целевой книги вставляются в текущую книгу.

Защита структуры книги

Надстройка может управлять возможностью пользователя по изменению структуры книги. Свойство protection объекта Workbook является объектом WorkbookProtection с методом protect() . В приведенном ниже примере показан основной сценарий переключения защиты структуры книги.

Метод protect принимает необязательный строковый параметр. Эта строка представляет пароль, необходимый пользователю для обхода защиты и изменения структуры книги.

Защиту также можно установить на уровне книги, чтобы предотвратить нежелательные изменения данных. Дополнительные сведения см. в разделе Защита данных статьи Работа с листами с использованием API JavaScript для Excel.

Дополнительные сведения о защите книги в Excel см. в статье Защита книги.

Доступ к свойствам документов

Объекты Workbook имеют доступ к метаданным файлов Office, называемым свойствами документов. Свойство properties объекта Workbook является объектом DocumentProperties, содержащим эти значения метаданных. В следующем примере показано, как установить author свойство.

Настраиваемые свойства

Также можно установить настраиваемые свойства. Объект DocumentProperties содержит свойство custom , представляющее коллекцию пар "ключ-значение" для свойств, определяемых пользователем. В приведенном ниже примере показано, как создать настраиваемое свойство с именем Introduction со значением "Hello", а затем вызвать его.

Настраиваемые свойства на уровне таблицы

Настраиваемые свойства также можно установить на уровне таблицы. Они похожи на настраиваемые свойства на уровне документов, за исключением того, что один и тот же ключ может повторяться в разных таблицах. В следующем примере показано, как создать настраиваемую свойство WorksheetGroup со значением "Альфа" на текущем таблице, а затем получить его.

Доступ к параметрам документа

Параметры книги похожи на коллекцию настраиваемых свойств. Различие заключается в том, что параметры уникальны для одного файла Excel и соединения надстройки, а свойства связаны только с файлом. В приведенном ниже примере показано, как создать параметр и получить к нему доступ.

Доступ к настройкам культуры приложений

В книге есть языковые и культурные параметры, влияющие на отображение определенных данных. Эти параметры могут помочь локализовать данные, когда пользователи надстройки делятся книгами на разных языках и культурах. Ваша надстройка может использовать анализ строк для локализации формата чисел, дат и времени в зависимости от параметров культуры системы, чтобы каждый пользователь видел данные в формате своей культуры.

Application.cultureInfo определяет параметры культуры системы как объект CultureInfo. Это содержит параметры, такие как числовой десятичной сепаратор или формат даты.

Некоторые параметры культуры можно изменить с помощью Excel пользовательского интерфейса. Параметры системы сохраняются в CultureInfo объекте. Любые локальные изменения хранятся как свойства уровня приложения,например Application.decimalSeparator .

В следующем примере изменяется десятичное сепараторное течение числовой строки с "," на символ, используемый в параметрах системы.

Добавление настраиваемых XML-данных в книгу

Формат файла Excel Open XML (XLSX) позволяет надстройке внедрить настраиваемые XML-данные в книгу. Эти данные сохраняются с книгой независимо от надстройки.

Книга содержит объект CustomXmlPartCollection, являющийся списком объектов CustomXmlParts. Они предоставляют доступ к строкам XML и соответствующему уникальному идентификатору. Сохраняя эти идентификаторы как параметры, надстройка может сохранять ключи к частям XML между сеансами.

В приведенных ниже примерах показано, как использовать настраиваемые части XML. В первом блоке кода показано, как внедрять XML-данные в документ. Выполняется сохранение списка проверяющих, а затем используются параметры книги, чтобы сохранить параметр id XML для будущих извлечений. Во втором блоке показано, как получить доступ к этим XML-данным позднее. Параметр "ContosoReviewXmlPartId" загружается и передается объекту customXmlParts книги. Данные XML затем печатаются в консоль.

CustomXMLPart.namespaceUri заполняется только в том случае, если настраиваемый XML-элемент верхнего уровня содержит атрибут xmlns .

Управление режимом вычислений

Установка режима вычислений

По умолчанию Excel пересчитывает результаты формул при каждом изменении ячейки из ссылки. Производительность вашей надстройки можно улучшить путем изменения режима вычислений. У объекта Application есть свойство calculationMode типа CalculationMode . Его можно установить к следующим значениям.

  • automatic : режим пересчета по умолчанию, при котором Excel вычисляет новые результаты формулы при каждом изменении соответствующих данных.
  • automaticExceptTables : аналогично automatic , за исключением того, что игнорируются любые изменения значений таблиц.
  • manual : вычисления выполняются только в том случае, если пользователь или надстройка запрашивает их.

Установка типа вычислений

Объект Application предоставляет метод применения немедленного пересчета. Метод Application.calculate(calculationType) запускает ручной пересчет с учетом указанного типа calculationType . Можно укаварить следующие значения.

  • full : пересчет всех формул во всех открытых книгах независимо от их изменения с прошлого пересчета.
  • fullRebuild : проверка зависимых формул с последующим пересчетом всех формул во всех открытых книгах независимо от их изменения с прошлого пересчета.
  • recalculate : пересчет формул, которые были изменены (или помечены программным путем для пересчета) с момента последнего вычисления, и зависимых от них формул во всех активных книгах.

Временная приостановка вычисления

API Excel также позволяет надстройкам отключить вычисления до вызова RequestContext.sync() . Для этого используется suspendApiCalculationUntilNextSync() . Используйте этот метод, если ваша надстройка изменяет большие диапазоны без необходимости доступа к данным между изменениями.

Обнаружение активации книг

Ваша надстройка может обнаруживать при активации книги. Книга становится неактивной, когда пользователь переключает фокус на другую книгу, на другое приложение или (в Excel в Интернете) на другую вкладку веб-браузера. Книга активируется, когда пользователь возвращает фокус в книгу. Активация книги может вызвать функции вызова в надстройке, например освежающие данные книги.

Чтобы определить, когда книга активирована, зарегистрируйте обработник событий для события onActivated книги. Обработчики событий onActivated для события получают объект WorkbookActivatedEventArgs при пожаре события.

Событие onActivated не определяет, когда книга открывается. Это событие обнаруживает только тогда, когда пользователь переключается на уже открытую книгу.

В следующем примере кода показано, как зарегистрировать обработник событий onActivated и настроить функцию вызова.

Сохраните книгу.

Workbook.save сохраняет книгу в постоянное хранилище. Метод save принимает один необязательный saveBehavior параметр, который может быть одним из следующих значений.

  • Excel.SaveBehavior.save (по умолчанию): файл будет сохранен без предварительного запроса имени файла, а также место для сохранения. Если файл не был сохранен ранее, он будет сохранен в папке по умолчанию. Если файл уже был сохранен ранее, он будет сохранен в той же папке.
  • Excel.SaveBehavior.prompt : если файл не был сохранен ранее, будет предложено ввести имя файла и место для сохранения. Если файл уже был сохранен ранее, он будет сохраняться в той же папке, и никаких дополнительных действий не потребуется.

Если пользователь при запрос на сохранение отменяет операцию, save выдает исключение.

ОТВЕТЫ

Ответ 1

Вы можете использовать библиотеку под названием ExcelLibrary. Это бесплатная библиотека с открытым исходным кодом, размещенная в Google Code:

Это выглядит как порт PHP ExcelWriter, который вы упомянули выше. Он пока не будет писать в новый формат .xlsx, но они работают над добавлением этой функциональности в.

Это очень просто, маленький и простой в использовании. Кроме того, он имеет DataSetHelper, который позволяет вам использовать DataSets и DataTables для удобной работы с данными Excel.

ExcelLibrary, кажется, все еще работает только для более старого формата Excel (файлы .xls), но может добавить поддержку в будущем для новых форматов 2007/2010.

Вы также можете использовать EPPlus, который работает только для файлов формата Excel 2007/2010 (файлы .xlsx). Там также NPOI, который работает с обоими.

Есть несколько известных ошибок с каждой библиотекой, как отмечено в комментариях. В целом, EPPlus кажется лучшим выбором с течением времени. Похоже, что он более активно обновляется и документируется.

Кроме того, как отмечает @АртёмЦарионов ниже, EPPlus имеет поддержку сводных таблиц, а ExcelLibrary может иметь некоторую поддержку (проблема сводных таблиц в ExcelLibrary)

Вот пример кода для ExcelLibrary:

Вот пример получения данных из базы данных и создания из нее рабочей книги. Обратите внимание, что код ExcelLibrary - это одна строка внизу:

Создать файл Excel так просто. Вы также можете вручную создавать файлы Excel, но вышеперечисленные функции меня поразили.

Ответ 2

Если вы довольны форматом xlsx, попробуйте мой проект GitHub, EPPlus. Все началось с исходного кода из ExcelPackage, но сегодня это полное переписывание. Он поддерживает диапазоны, стилизацию ячеек, диаграммы, фигуры, изображения, именованные диапазоны, автофильтр и многое другое.

Ответ 3

Я успешно использовал следующие проекты с открытым исходным кодом:

ExcelPackage для форматов OOXML (Office 2007)

NPOI для формата .XLS(Office 2003). NPOI 2.0 (бета-версия) также поддерживает XLSX.

Ответ 4

А как насчет использования Open XML SDK 2.0 для Microsoft Office?

Ответ 5

Вы можете использовать OLEDB для создания и обработки файлов Excel. Проверьте это: Чтение и запись Excel с помощью OLEDB.

EDIT - Еще несколько ссылок:

Ответ 6

Отказ от ответственности: я владею SpreadsheetGear LLC

Ответ 7

Несколько вариантов, которые я использовал:

Если XLSX является обязательным: ExcelPackage - хороший старт, но он умер, когда разработчик прекратил работать над ним. ExML поднялся оттуда и добавил несколько функций. ExML не является плохим вариантом, я все еще использую его на нескольких веб-сайтах.

Ответ 8

Очень легкая опция может заключаться в использовании таблиц HTML. Просто создайте теги head, body и table в файле и сохраните его как файл с расширением .xls. Существуют специальные атрибуты Microsoft, которые можно использовать для создания вывода, включая формулы.

Я понимаю, что вы не можете кодировать это в веб-приложении, но вот пример композиции файла Excel через HTML-таблица. Этот метод можно использовать, если вы кодировали консольное приложение, настольное приложение или службу.

Ответ 9

Вы можете использовать ExcelXmlWriter.

Ответ 10

Ответ 11

Возможно, вы захотите проверить классы взаимодействия. Вы говорите, нет OLE (что это не так), но классы взаимодействия очень просты в использовании.

Вы можете быть впечатлены, если не попробовали их.

Пожалуйста, обратите внимание на позицию Microsoft по этому вопросу:

Ответ 12

Полный исходный код предоставляется - бесплатно - вместе с инструкциями и демонстрационным приложением.

После добавления этого класса в приложение вы можете экспортировать свой DataSet в Excel только в одной строке кода:

Это не намного проще, чем это.

И это даже не требует наличия Excel на вашем сервере.

Ответ 13

Вы можете рассмотреть возможность создания ваших файлов в формате XML Spreadsheet 2003. Это простой формат XML с использованием хорошо документированной схемы.

Ответ 14

У них есть бесплатная версия со всеми функциями, но не более 150 строк на листе и 5 листов на книгу, если это соответствует вашим потребностям.

Мне еще не приходилось пользоваться им, но выглядит интересно.

Ответ 15

Syncfusion Essential XlsIO может сделать это. Он не зависит от Microsoft Office, а также имеет специальную поддержку для различных платформ.

Весь набор средств управления предоставляется бесплатно через программу лицензий сообщества, если вы соответствуете требованиям (доход менее 1 миллиона долларов США). Примечание: я работаю на Syncfusion.

Ответ 16

Доступны различные библиотеки Office 2003 XML для небольших файлов Excel. Тем не менее, я считаю большой размер большой рабочей книги, сохраненной в формате XML, проблемой. Например, рабочая книга, с которой я работаю, будет иметь размер 40 МБ в новом (и, по общему мнению, более плотно упакованном) формате XLSX и станет файлом XML размером 360 МБ.

Насколько мне показало мое исследование, есть два коммерческих пакета, которые позволяют выводить файлы в более старые двоичные форматы. Они:

Ни один не дешев (500 долларов США и 800 долларов США соответственно, я думаю). но оба работают независимо от самого Excel.

Ответ 17

вы также можете использовать стороннюю библиотеку, например Aspose.

Эта библиотека имеет то преимущество, что на вашем компьютере не будет установлен Excel, который был бы идеальным в вашем случае.

Ответ 18

OpenXML также является хорошей альтернативой, которая помогает избежать установки MS Excel на сервере. Open XML SDK 2.0, предоставляемый Microsoft, упрощает задачу управления пакетами Open XML и базовыми элементами схемы Open XML в пакете. Интерфейс прикладного программирования Open XML (API) инкапсулирует многие общие задачи, которые разработчики выполняют в пакетах Open XML.

Ответ 19

Ответ 20

Это коммерческий продукт, но вы получите полный исходный код, если купите его. Итак, я полагаю, вы могли бы скомпилировать его в свою сборку, если бы вы действительно этого хотели. В противном случае это всего лишь одна дополнительная сборка для xcopy - без настройки, установки или чего-либо подобного.

Ответ 21

(Отказ от ответственности: я работаю для SoftArtisans, компании, которая делает OfficeWriter)

Ответ 22

Я написал простой код для экспорта набора данных в Excel без использования объекта Excel с помощью System.IO.StreamWriter.

Ниже приведен код, который будет читать все таблицы из набора данных и записывать их на листы один за другим. Я взял помощь из этой статьи.

Ответ 23

Или вы могли бы использовать Interop.

Ответ 24

Здесь можно сделать это с LINQ to XML, в комплекте с образцом кода:

Это немного сложно, поскольку вам нужно импортировать пространства имен и т.д., но это позволяет вам избежать любых внешних зависимостей.

Ответ 25

где образец выглядит следующим образом:

Ответ 26

Некоторые сторонние поставщики компонентов, такие как Infragistics или Syncfusion, обеспечивают очень хорошие возможности экспорта Excel, которые не требуют установки Microsoft Excel.

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

Если ваш экспорт предназначен для выполнения на стороне сервера с акцентом на экспортируемые данные и без ссылки на пользовательский интерфейс, я бы воспользовался одним из бесплатных вариантов с открытым исходным кодом (например, ExcelLibrary).

Ранее я участвовал в проектах, которые пытались использовать автоматизацию на стороне сервера в пакете Microsoft Office. Исходя из этого опыта, я бы настоятельно рекомендовал против такого подхода.

Ответ 27

Привет, это решение заключается в том, чтобы экспортировать вид сетки в ваш файл excel, который может помочь вам

Ответ 28

Я разработал простое приложение WPF для github, которое будет работать в Windows для этой цели. Существует класс-заполнитель под названием GeneratedClass который вы можете вставить сгенерированный код. Если вы вернетесь к одной версии файла, она будет генерировать файл excel следующим образом:

enter image description here

Ответ 29

В этой статье приведены примеры кода, в которых показано, как выполнять стандартные задачи для таблиц с использованием API JavaScript для Excel. Полный список свойств и методов, поддерживаемых объектами и объектами, см. в таблице Object Table TableCollection (API JavaScript для Excel) и TableCollection Object (API JavaScriptдля Excel).

Создание таблицы

В примере кода ниже показано, как создать таблицу на листе Sample (Пример). В таблице имеются заголовки, а также четыре столбца и семь строк с данными. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Чтобы указать имя таблицы, сначала необходимо создать таблицу, а затем задать ее свойство, как показано name в следующем примере.

Новая таблица

Новая таблица Excel.

Добавление строк в таблицу

В примере ниже показано, как добавить семь новых строк в таблицу ExpensesTable (Таблица расходов) на листе Sample (Пример). Новые строки будут добавлены в конец таблицы. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Свойство объекта TableRow указывает номер индекса строки в коллекции строк index таблицы. Объект TableRow не содержит id свойства, которые можно использовать в качестве уникального ключа для идентификации строки.

Таблица с новыми строками

Таблица с новыми строками в Excel.

Добавление столбца в таблицу

В примерах ниже показано, как добавить столбец в таблицу. В первом примере показано, как заполнить новый столбец статическими значениями, во втором — как заполнить новый столбец формулами.

Свойство index объекта TableColumn указывает номер индекса столбца в коллекции столбцов таблицы. Свойство id объекта TableColumn содержит уникальный ключ, идентифицирующий столбец.

Добавление столбца, содержащего статические значения

В примере кода ниже показано, как добавить новый столбец в таблицу ExpensesTable (Таблица расходов) на листе Sample (Пример). Новый столбец будет добавлен после всех существующих столбцов в таблице. Он будет содержать заголовок Day of the Week (День недели), а также данные для заполнения ячеек в столбце. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Таблица с новым столбцом

Таблица с новым столбцом в Excel.

Добавление столбца, содержащего формулы

В примере кода ниже показано, как добавить новый столбец в таблицу ExpensesTable (Таблица расходов) на листе Sample (Пример). Новый столбец будет добавлен в конец таблицы, будет содержать заголовок Type of the Day (Тип дня), и в нем будет использована формула для заполнения каждой ячейки столбца. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Таблица с новым столбцом, содержащим вычисленные значения

Таблица с новым вычисляемой колонкой в Excel.

Resize a table

Надстройка может изменять объем таблицы без добавления данных в таблицу или изменения значений ячейки. Чтобы повторно использовать таблицу, используйте метод Table.resize. В следующем примере кода показано, как сделать таблицу повторной. В этом примере кода используется Раздел ExpensesTable из раздела Создание таблицы ранее в этой статье и задает новый диапазон таблицы A1:D20.

Новый диапазон таблицы должен совпадать с исходным диапазоном, а загонщики (или верхняя часть таблицы) должны быть в одной строке.

Таблица после повторного

Таблица с несколькими пустыми строками в Excel.

Изменение имени столбца

В примере кода ниже показано, как изменить имя первого столбца в таблице на Purchase date. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Таблица со столбцом с новым именем

Таблица с новым именем столбца в Excel.

Получение данных из таблицы

В примере кода ниже показано, как считать данные из таблицы ExpensesTable (Таблица расходов), размещенной на листе Sample (Пример), а затем отобразить эти данные под таблицей на том же листе.

Таблица и выведенные данные

Таблица данных в Excel.

Обнаружение изменений данных

Возможно, надстройке потребуется реагировать на изменения пользователями данных в таблице. Чтобы обнаружить эти изменения, можно зарегистрировать обработчик событий для события onChanged таблицы. Обработчики события onChanged получают объект TableChangedEventArgs при возникновении события.

Объект TableChangedEventArgs предоставляет сведения об изменениях и источнике. Так как событие onChanged возникает при изменении формата или значения данных, может быть полезно, чтобы надстройка проверяла, действительно ли значения изменились. Свойство details объединяет эти сведения в виде интерфейса ChangedEventDetail. В следующем примере кода показано, как отобразить значения и типы измененной ячейки до и после изменения.

Сортировка данных в таблице

В примере кода ниже показано, как отсортировать данные по убыванию в четвертом столбце таблицы.

Данные таблицы, отсортированные по столбцу Amount (Сумма) в порядке убывания

Отсортировали данные таблицы в Excel.

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

Применение фильтров к таблице

В примере кода ниже показано, как применить фильтры для столбцов Amount (Сумма) и Category (Категория) в таблице. В результате применения фильтров будут отображены только те строки, у которых в столбце Category (Категория) содержится одно из указанных значений, а значения в столбце Amount (Сумма) меньше среднего значения для всех строк.

Таблица данных, в которой применены фильтры для столбцов Category (Категория) и Amount (Сумма)

Данные таблицы фильтруются в Excel.

Удаление фильтров в таблице

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

Данные таблицы без фильтров

Данные таблицы не фильтруются в Excel.

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

В примере кода ниже показано, как получить диапазон, содержащий данные только из тех ячеек, которые в данный момент отображаются в указанной таблице, и записать значения из этого диапазона в консоль. Метод, как показано ниже, можно использовать для получения видимого содержимого таблицы при применении фильтров getVisibleView() столбцов.

Автофильтр

Надстройка может использовать объект AutoFilter таблицы для фильтрации данных. Объект AutoFilter является целой структурой фильтра таблицы или диапазона. Все операции фильтрации, описанные выше в этой статье, совместимы с автофильтром. Единая точка доступа упрощает доступ к нескольким фильтрам и управление ими.

В следующем примере кода показана такая же фильтрация данных, как в примере кода выше, но выполненная полностью с помощью автофильтра.

Объект AutoFilter можно также применять к диапазону на уровне листа. Дополнительные сведения см. в статье Работа с листами с использованием API JavaScript для Excel.

Форматирование таблицы

В примере кода ниже показано, как применить форматирование к таблице. В примере показано, как указать различные цвета заливки для строки заголовков, основной части, второй строки и первого столбца таблицы. Сведения о свойствах, которые вы можете использовать для задания формата, см. в статье Объект RangeFormat (API JavaScript для Excel).

Таблица после применения форматирования

Таблица после форматирования применяется в Excel.

Преобразование диапазона в таблицу

В примере кода ниже показано, как создать диапазон данных и преобразовывать его в таблицу.

Данные в диапазоне (перед его преобразованием в таблицу)

Данные в диапазоне Excel.

Данные в таблице (после преобразования диапазона в таблицу)

Данные в таблице Excel.

Импорт данных JSON в таблицу

В примере кода ниже показано, как создать таблицу на листе Sample (Пример), а затем заполнить ее с помощью объекта JSON, который определяет две строки данных. Если Excel, в котором работает код, поддерживает набор требований ExcelApi 1.2, то ширина столбцов и высота строк лучше всего соответствуют текущим данным в таблице.

Читайте также: