Чтение, манипулирование и запись данных и стилей электронных таблиц в форматы XLSX и JSON.
Реверс-инжиниринг файлов электронных таблиц Excel как проекта.
npm install exceljs
Взносы очень приветствуются! Это помогает мне узнать, какие функции желательны или какие ошибки вызывают наибольшую боль.
У меня есть только одна просьба; Если вы отправляете запрос на исправление ошибки, добавьте модульный тест или интеграционный тест (в папке спецификации), который выявляет проблему. Даже PR, у которого просто неудачный тест, это нормально — я могу проанализировать, что делает тест, и исправить на основе этого код.
Примечание. Старайтесь избегать изменения версии пакета в PR. Версии обновляются при выпуске, и любые изменения, скорее всего, приведут к коллизиям при слиянии.
Чтобы внести ясность, все материалы, добавленные в эту библиотеку, будут включены в лицензию MIT библиотеки.
const ExcelJS = require ( 'exceljs' ) ;
Чтобы использовать транспилированный код ES5, например для версий node.js старше 10, используйте путь dist/es5.
const ExcelJS = require ( 'exceljs/dist/es5' ) ;
Примечание. Сборка ES5 имеет неявную зависимость от ряда полифилов, которые exceljs больше не добавляют явно. Вам нужно будет добавить «core-js» и «regenerator-runtime» в ваши зависимости и включить в свой код следующие требования перед импортом Exceljs:
// polyfills required by exceljs
require ( 'core-js/modules/es.promise' ) ;
require ( 'core-js/modules/es.string.includes' ) ;
require ( 'core-js/modules/es.object.assign' ) ;
require ( 'core-js/modules/es.object.keys' ) ;
require ( 'core-js/modules/es.symbol' ) ;
require ( 'core-js/modules/es.symbol.async-iterator' ) ;
require ( 'regenerator-runtime/runtime' ) ;
const ExcelJS = require ( 'exceljs/dist/es5' ) ;
Для IE 11 вам также понадобится полифилл для поддержки шаблонов регулярных выражений Юникода. Например,
const rewritePattern = require ( 'regexpu-core' ) ;
const { generateRegexpuOptions } = require ( '@babel/helper-create-regexp-features-plugin/lib/util' ) ;
const { RegExp } = global ;
try {
new RegExp ( 'a' , 'u' ) ;
} catch ( err ) {
global . RegExp = function ( pattern , flags ) {
if ( flags && flags . includes ( 'u' ) ) {
return new RegExp ( rewritePattern ( pattern , flags , generateRegexpuOptions ( { flags , pattern } ) ) ) ;
}
return new RegExp ( pattern , flags ) ;
} ;
global . RegExp . prototype = RegExp . prototype ;
}
ExcelJS публикует два браузерных пакета внутри папки dist/:
Один с неявной зависимостью от полифилов Core-JS...
< script src =" https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js " > </ script >
< script src =" exceljs.js " > </ script >
И один без...
< script src =" --your-project's-pollyfills-here-- " > </ script >
< script src =" exceljs.bare.js " > </ script >
const workbook = new ExcelJS . Workbook ( ) ;
workbook . creator = 'Me' ;
workbook . lastModifiedBy = 'Her' ;
workbook . created = new Date ( 1985 , 8 , 30 ) ;
workbook . modified = new Date ( ) ;
workbook . lastPrinted = new Date ( 2016 , 9 , 27 ) ;
// Set workbook dates to 1904 date system
workbook . properties . date1904 = true ;
// Force workbook calculation on load
workbook . calcProperties . fullCalcOnLoad = true ;
Представления книги определяют, сколько отдельных окон Excel откроется при просмотре книги.
workbook . views = [
{
x : 0 , y : 0 , width : 10000 , height : 20000 ,
firstSheet : 0 , activeTab : 1 , visibility : 'visible'
}
]
const sheet = workbook . addWorksheet ( 'My Sheet' ) ;
Используйте второй параметр функции addWorksheet, чтобы указать параметры рабочего листа.
Например:
// create a sheet with red tab colour
const sheet = workbook . addWorksheet ( 'My Sheet' , { properties : { tabColor : { argb : 'FFC0000' } } } ) ;
// create a sheet where the grid lines are hidden
const sheet = workbook . addWorksheet ( 'My Sheet' , { views : [ { showGridLines : false } ] } ) ;
// create a sheet with the first row and column frozen
const sheet = workbook . addWorksheet ( 'My Sheet' , { views : [ { state : 'frozen' , xSplit : 1 , ySplit : 1 } ] } ) ;
// Create worksheets with headers and footers
const sheet = workbook . addWorksheet ( 'My Sheet' , {
headerFooter : { firstHeader : "Hello Exceljs" , firstFooter : "Hello World" }
} ) ;
// create new sheet with pageSetup settings for A4 - landscape
const worksheet = workbook . addWorksheet ( 'My Sheet' , {
pageSetup : { paperSize : 9 , orientation : 'landscape' }
} ) ;
Используйте id
листа, чтобы удалить лист из книги.
Например:
// Create a worksheet
const sheet = workbook . addWorksheet ( 'My Sheet' ) ;
// Remove the worksheet using worksheet id
workbook . removeWorksheet ( sheet . id )
// Iterate over all sheets
// Note: workbook.worksheets.forEach will still work but this is better
workbook . eachSheet ( function ( worksheet , sheetId ) {
// ...
} ) ;
// fetch sheet by name
const worksheet = workbook . getWorksheet ( 'My Sheet' ) ;
// fetch sheet by id
// INFO: Be careful when using it!
// It tries to access to `worksheet.id` field. Sometimes (really very often) workbook has worksheets with id not starting from 1.
// For instance It happens when any worksheet has been deleted.
// It's much more safety when you assume that ids are random. And stop to use this function.
// If you need to access all worksheets in a loop please look to the next example.
const worksheet = workbook . getWorksheet ( 1 ) ;
// access by `worksheets` array:
workbook . worksheets [ 0 ] ; //the first one;
Важно знать, что workbook.getWorksheet(1) != Workbook.worksheets[0]
и workbook.getWorksheet(1) != Workbook.worksheets[1]
, поскольку workbook.worksheets[0].id
может иметь любое значение.
// make worksheet visible
worksheet . state = 'visible' ;
// make worksheet hidden
worksheet . state = 'hidden' ;
// make worksheet hidden from 'hide/unhide' dialog
worksheet . state = 'veryHidden' ;
Рабочие листы поддерживают сегмент свойств, позволяющий контролировать некоторые функции рабочего листа.
// create new sheet with properties
const worksheet = workbook . addWorksheet ( 'sheet' , { properties : { tabColor : { argb : 'FF00FF00' } } } ) ;
// create a new sheet writer with properties
const worksheetWriter = workbookWriter . addWorksheet ( 'sheet' , { properties : { outlineLevelCol : 1 } } ) ;
// adjust properties afterwards (not supported by worksheet-writer)
worksheet . properties . outlineLevelCol = 2 ;
worksheet . properties . defaultRowHeight = 15 ;
Поддерживаемые свойства
Имя | По умолчанию | Описание |
---|---|---|
tabColor | неопределенный | Цвет вкладок |
OutlineLevelCol | 0 | Уровень структуры столбца листа |
КонтурУровеньРоу | 0 | Уровень структуры строки листа |
defaultRowHeight | 15 | Высота строки по умолчанию |
по умолчаниюКолВидс | (необязательный) | Ширина столбца по умолчанию |
dyDescent | 55 | подлежит уточнению |
В рабочий лист добавлено несколько новых показателей...
Имя | Описание |
---|---|
строкаКаунт | Общий размер строки документа. Равен номеру последней строки, содержащей значения. |
фактическоеRowCount | Подсчет количества строк, имеющих значения. Если строка в середине документа пуста, она не будет включена в подсчет. |
КолонкаКолонка | Общий размер столбца документа. Равно максимальному количеству ячеек во всех строках. |
фактическоеКолумнКаунт | Подсчет количества столбцов, имеющих значения. |
Все свойства, которые могут повлиять на печать листа, хранятся в объекте pageSetup на листе.
// create new sheet with pageSetup settings for A4 - landscape
const worksheet = workbook . addWorksheet ( 'sheet' , {
pageSetup : { paperSize : 9 , orientation : 'landscape' }
} ) ;
// create a new sheet writer with pageSetup settings for fit-to-page
const worksheetWriter = workbookWriter . addWorksheet ( 'sheet' , {
pageSetup : { fitToPage : true , fitToHeight : 5 , fitToWidth : 7 }
} ) ;
// adjust pageSetup settings afterwards
worksheet . pageSetup . margins = {
left : 0.7 , right : 0.7 ,
top : 0.75 , bottom : 0.75 ,
header : 0.3 , footer : 0.3
} ;
// Set Print Area for a sheet
worksheet . pageSetup . printArea = 'A1:G20' ;
// Set multiple Print Areas by separating print areas with '&&'
worksheet . pageSetup . printArea = 'A1:G10&&A11:G20' ;
// Repeat specific rows on every printed page
worksheet . pageSetup . printTitlesRow = '1:3' ;
// Repeat specific columns on every printed page
worksheet . pageSetup . printTitlesColumn = 'A:C' ;
Поддерживаемые настройки страницы
Имя | По умолчанию | Описание |
---|---|---|
поля | Пробелы по краям страницы. Единицы измерения — дюймы. | |
ориентация | 'портрет' | Ориентация страницы – т.е. выше (книжная) или шире (альбомная). |
горизонтальныйDpi | 4294967295 | Горизонтальных точек на дюйм. Значение по умолчанию: -1. |
вертикальныйDpi | 4294967295 | Вертикальные точки на дюйм. Значение по умолчанию: -1. |
фиттопейдж | Использовать ли настройки fitToWidth и fitToHeight или масштабирования. Значение по умолчанию основано на наличии этих параметров в объекте pageSetup — если присутствуют оба, масштабирование выигрывает (т. е. значение по умолчанию будет ложным). | |
страницаЗаказать | 'downThenOver' | В каком порядке печатать страницы — один из ['downThenOver', 'overThenDown'] |
черныйИБелый | ЛОЖЬ | Печать без цвета |
черновик | ЛОЖЬ | Печать с меньшим качеством (и чернилами) |
ячейкаКомментарии | 'Никто' | Куда размещать комментарии — один из ['atEnd', 'asDisplayed', 'None'] |
ошибки | 'отображается' | Где показывать ошибки - один из ['тире', 'пробел', 'NA', 'отображается'] |
шкала | 100 | Процентное значение для увеличения или уменьшения размера отпечатка. Активен, когда fitToPage имеет значение false |
FitToWidth | 1 | На сколько страниц ширины листа следует распечатать. Активен, когда fitToPage имеет значение true |
FitToHeight | 1 | На сколько страниц должен быть напечатан лист. Активен, когда fitToPage имеет значение true |
размер бумаги | Какой размер бумаги использовать (см. ниже) | |
showRowColHeaders | ЛОЖЬ | Показывать ли номера строк и буквы столбцов |
showGridLines | ЛОЖЬ | Показывать ли линии сетки |
номер первой страницы | Какой номер использовать для первой страницы | |
горизонтальныйПо центру | ЛОЖЬ | Центрировать ли данные листа по горизонтали |
вертикальныйПо центру | ЛОЖЬ | Центрировать ли данные листа по вертикали |
Примеры размеров бумаги
Имя | Ценить |
---|---|
Письмо | неопределенный |
Юридический | 5 |
Исполнительный | 7 |
А3 | 8 |
А4 | 9 |
А5 | 11 |
B5 (ДЖИС) | 13 |
Конверт №10 | 20 |
Конверт DL | 27 |
Конверт С5 | 28 |
Конверт B5 | 34 |
Конверт Монарх | 37 |
Двойная японская открытка, повернутая | 82 |
16К 197x273 мм | 119 |
Вот как можно добавить верхние и нижние колонтитулы. Добавляемый контент в основном представляет собой текст, например время, введение, информацию о файле и т. д., и вы можете установить стиль текста. Кроме того, вы можете задать разные тексты для первой страницы и даже страницы.
Примечание. Изображения в настоящее время не поддерживаются.
// Create worksheets with headers and footers
var sheet = workbook . addWorksheet ( 'sheet' , {
headerFooter : { firstHeader : "Hello Exceljs" , firstFooter : "Hello World" }
} ) ;
// Create worksheets with headers and footers
var worksheetWriter = workbookWriter . addWorksheet ( 'sheet' , {
headerFooter : { firstHeader : "Hello Exceljs" , firstFooter : "Hello World" }
} ) ;
// Set footer (default centered), result: "Page 2 of 16"
worksheet . headerFooter . oddFooter = "Page &P of &N" ;
// Set the footer (default centered) to bold, resulting in: "Page 2 of 16"
worksheet . headerFooter . oddFooter = "Page &P of &N" ;
// Set the left footer to 18px and italicize. Result: "Page 2 of 16"
worksheet . headerFooter . oddFooter = "&LPage &P of &N" ;
// Set the middle header to gray Aril, the result: "52 exceljs"
worksheet . headerFooter . oddHeader = "&C&KCCCCCC&"Aril"52 exceljs" ;
// Set the left, center, and right text of the footer. Result: “Exceljs” in the footer left. “demo.xlsx” in the footer center. “Page 2” in the footer right
worksheet . headerFooter . oddFooter = "&Lexceljs&C&F&RPage &P" ;
// Add different header & footer for the first page
worksheet . headerFooter . differentFirst = true ;
worksheet . headerFooter . firstHeader = "Hello Exceljs" ;
worksheet . headerFooter . firstFooter = "Hello World"
Поддерживаемые настройки headerFooter
Имя | По умолчанию | Описание |
---|---|---|
разныеПервый | ЛОЖЬ | Установите для параметра DifferentFirst значение true, что указывает на то, что верхние и нижние колонтитулы первой страницы отличаются от других страниц. |
разныеНечетныеЧетные | ЛОЖЬ | Установите для параметра DifferentOddEven значение true, что указывает на то, что верхние и нижние колонтитулы для нечетных и четных страниц различаются. |
нечетный заголовок | нулевой | Установить строку заголовка для нечетных страниц (по умолчанию), можно отформатировать строку |
нечетный нижний колонтитул | нулевой | Установить строку нижнего колонтитула для нечетных страниц (по умолчанию), можно отформатировать строку |
дажеЗаголовок | нулевой | Установить строку заголовка для четных страниц, можно отформатировать строку |
даже нижний колонтитул | нулевой | Установить строку нижнего колонтитула для четных страниц, можно отформатировать строку |
первыйзаголовок | нулевой | Установить строку заголовка для первой страницы, можно отформатировать строку |
первый нижний колонтитул | нулевой | Установить строку нижнего колонтитула для первой страницы, можно отформатировать строку |
Команды сценария
Команды | Описание |
---|---|
&Л | Установить положение слева |
&С | Установите положение в центре |
&Р | Установите положение вправо |
&П | Текущий номер страницы |
&Н | Общее количество страниц |
&Д | Текущая дата |
&Т | Текущее время |
&Г | Картина |
&А | Имя рабочего листа |
&Ф | Имя файла |
&Б | Сделать текст жирным |
&Я | Выделить текст курсивом |
&U | Подчеркивание текста |
&"название шрифта" | название шрифта, например &"Aril" |
&размер шрифта | размер шрифта, например 12 |
&KHEXКод | цвет шрифта, например &KCCCCCC |
Рабочие листы теперь поддерживают список представлений, которые управляют тем, как Excel представляет лист:
Каждое представление также поддерживает различные свойства:
Имя | По умолчанию | Описание |
---|---|---|
состояние | 'нормальный' | Управляет состоянием просмотра: нормальное, замороженное или разделенное. |
вправо-влево | ЛОЖЬ | Устанавливает ориентацию представления рабочего листа справа налево. |
активная ячейка | неопределенный | Текущая выбранная ячейка |
показатьЛинейку | истинный | Показывает или скрывает линейку в макете страницы. |
showRowColHeaders | истинный | Показывает или скрывает заголовки строк и столбцов (например, A1, B1 вверху и 1,2,3 слева). |
showGridLines | истинный | Показывает или скрывает линии сетки (отображаются для ячеек, границы которых не определены) |
зумМасштаб | 100 | Процентное увеличение для использования при просмотре |
масштабированиеОбычный | 100 | Нормальный зум для просмотра |
стиль | неопределенный | Стиль представления — один из pageBreakPreview или pageLayout. Примечание. PageLayout несовместим с замороженными представлениями. |
Замороженные представления поддерживают следующие дополнительные свойства:
Имя | По умолчанию | Описание |
---|---|---|
xSplit | 0 | Сколько столбцов заморозить. Чтобы заморозить только строки, установите для этого параметра значение 0 или неопределенное. |
ySplit | 0 | Сколько строк заморозить. Чтобы заморозить только столбцы, установите для этого параметра значение 0 или неопределенное значение. |
topLeftCell | особенный | Какая ячейка будет находиться в левом верхнем углу правой нижней панели. Примечание: не может быть замороженной ячейкой. По умолчанию используется первая незамороженная ячейка. |
worksheet . views = [
{ state : 'frozen' , xSplit : 2 , ySplit : 3 , topLeftCell : 'G10' , activeCell : 'A1' }
] ;
Разделенные представления поддерживают следующие дополнительные свойства:
Имя | По умолчанию | Описание |
---|---|---|
xSplit | 0 | На сколько точек слева поставить сплиттер. Чтобы разделить вертикально, установите для этого параметра значение 0 или неопределенное. |
ySplit | 0 | На сколько точек сверху поставить сплиттер. Чтобы разделить горизонтально, установите для этого параметра значение 0 или неопределенное. |
topLeftCell | неопределенный | Какая ячейка будет находиться в левом верхнем углу правой нижней панели. |
активная панель | неопределенный | Какая панель будет активной — одна из topLeft, topRight, BottomLeft и BottomRight. |
worksheet . views = [
{ state : 'split' , xSplit : 2000 , ySplit : 3000 , topLeftCell : 'G10' , activeCell : 'A1' }
] ;
К вашему листу можно применить автоматический фильтр.
worksheet . autoFilter = 'A1:C1' ;
Хотя строка диапазона является стандартной формой автофильтра, рабочий лист также поддерживает следующие значения:
// Set an auto filter from A1 to C1
worksheet . autoFilter = {
from : 'A1' ,
to : 'C1' ,
}
// Set an auto filter from the cell in row 3 and column 1
// to the cell in row 5 and column 12
worksheet . autoFilter = {
from : {
row : 3 ,
column : 1
} ,
to : {
row : 5 ,
column : 12
}
}
// Set an auto filter from D3 to the
// cell in row 7 and column 5
worksheet . autoFilter = {
from : 'D3' ,
to : {
row : 7 ,
column : 5
}
}
// Add column headers and define column keys and widths
// Note: these column structures are a workbook-building convenience only,
// apart from the column width, they will not be fully persisted.
worksheet . columns = [
{ header : 'Id' , key : 'id' , width : 10 } ,
{ header : 'Name' , key : 'name' , width : 32 } ,
{ header : 'D.O.B.' , key : 'DOB' , width : 10 , outlineLevel : 1 }
] ;
// Access an individual columns by key, letter and 1-based column number
const idCol = worksheet . getColumn ( 'id' ) ;
const nameCol = worksheet . getColumn ( 'B' ) ;
const dobCol = worksheet . getColumn ( 3 ) ;
// set column properties
// Note: will overwrite cell value C1
dobCol . header = 'Date of Birth' ;
// Note: this will overwrite cell values C1:C2
dobCol . header = [ 'Date of Birth' , 'A.K.A. D.O.B.' ] ;
// from this point on, this column will be indexed by 'dob' and not 'DOB'
dobCol . key = 'dob' ;
dobCol . width = 15 ;
// Hide the column if you'd like
dobCol . hidden = true ;
// set an outline level for columns
worksheet . getColumn ( 4 ) . outlineLevel = 0 ;
worksheet . getColumn ( 5 ) . outlineLevel = 1 ;
// columns support a readonly field to indicate the collapsed state based on outlineLevel
expect ( worksheet . getColumn ( 4 ) . collapsed ) . to . equal ( false ) ;
expect ( worksheet . getColumn ( 5 ) . collapsed ) . to . equal ( true ) ;
// iterate over all current cells in this column
dobCol . eachCell ( function ( cell , rowNumber ) {
// ...
} ) ;
// iterate over all current cells in this column including empty cells
dobCol . eachCell ( { includeEmpty : true } , function ( cell , rowNumber ) {
// ...
} ) ;
// add a column of new values
worksheet . getColumn ( 6 ) . values = [ 1 , 2 , 3 , 4 , 5 ] ;
// add a sparse column of values
worksheet . getColumn ( 7 ) . values = [ , , 2 , 3 , , 5 , , 7 , , , , 11 ] ;
// cut one or more columns (columns to the right are shifted left)
// If column properties have been defined, they will be cut or moved accordingly
// Known Issue: If a splice causes any merged cells to move, the results may be unpredictable
worksheet . spliceColumns ( 3 , 2 ) ;
// remove one column and insert two more.
// Note: columns 4 and above will be shifted right by 1 column.
// Also: If the worksheet has more rows than values in the column inserts,
// the rows will still be shifted as if the values existed
const newCol3Values = [ 1 , 2 , 3 , 4 , 5 ] ;
const newCol4Values = [ 'one' , 'two' , 'three' , 'four' , 'five' ] ;
worksheet . spliceColumns ( 3 , 1 , newCol3Values , newCol4Values ) ;
// Get a row object. If it doesn't already exist, a new empty one will be returned
const row = worksheet . getRow ( 5 ) ;
// Get multiple row objects. If it doesn't already exist, new empty ones will be returned
const rows = worksheet . getRows ( 5 , 2 ) ; // start, length (>0, else undefined is returned)
// Get the last editable row in a worksheet (or undefined if there are none)
const row = worksheet . lastRow ;
// Set a specific row height
row . height = 42.5 ;
// make row hidden
row . hidden = true ;
// set an outline level for rows
worksheet . getRow ( 4 ) . outlineLevel = 0 ;
worksheet . getRow ( 5 ) . outlineLevel = 1 ;
// rows support a readonly field to indicate the collapsed state based on outlineLevel
expect ( worksheet . getRow ( 4 ) . collapsed ) . to . equal ( false ) ;
expect ( worksheet . getRow ( 5 ) . collapsed ) . to . equal ( true ) ;
row . getCell ( 1 ) . value = 5 ; // A5's value set to 5
row . getCell ( 'name' ) . value = 'Zeb' ; // B5's value set to 'Zeb' - assuming column 2 is still keyed by name
row . getCell ( 'C' ) . value = new Date ( ) ; // C5's value set to now
// Get a row as a sparse array
// Note: interface change: worksheet.getRow(4) ==> worksheet.getRow(4).values
row = worksheet . getRow ( 4 ) . values ;
expect ( row [ 5 ] ) . toEqual ( 'Kyle' ) ;
// assign row values by contiguous array (where array element 0 has a value)
row . values = [ 1 , 2 , 3 ] ;
expect ( row . getCell ( 1 ) . value ) . toEqual ( 1 ) ;
expect ( row . getCell ( 2 ) . value ) . toEqual ( 2 ) ;
expect ( row . getCell ( 3 ) . value ) . toEqual ( 3 ) ;
// assign row values by sparse array (where array element 0 is undefined)
const values = [ ]
values [ 5 ] = 7 ;
values [ 10 ] = 'Hello, World!' ;
row . values = values ;
expect ( row . getCell ( 1 ) . value ) . toBeNull ( ) ;
expect ( row . getCell ( 5 ) . value ) . toEqual ( 7 ) ;
expect ( row . getCell ( 10 ) . value ) . toEqual ( 'Hello, World!' ) ;
// assign row values by object, using column keys
row . values = {
id : 13 ,
name : 'Thing 1' ,
dob : new Date ( )
} ;
// Insert a page break below the row
row . addPageBreak ( ) ;
// Iterate over all rows that have values in a worksheet
worksheet . eachRow ( function ( row , rowNumber ) {
console . log ( 'Row ' + rowNumber + ' = ' + JSON . stringify ( row . values ) ) ;
} ) ;
// Iterate over all rows (including empty rows) in a worksheet
worksheet . eachRow ( { includeEmpty : true } , function ( row , rowNumber ) {
console . log ( 'Row ' + rowNumber + ' = ' + JSON . stringify ( row . values ) ) ;
} ) ;
// Iterate over all non-null cells in a row
row . eachCell ( function ( cell , colNumber ) {
console . log ( 'Cell ' + colNumber + ' = ' + cell . value ) ;
} ) ;
// Iterate over all cells in a row (including empty cells)
row . eachCell ( { includeEmpty : true } , function ( cell , colNumber ) {
console . log ( 'Cell ' + colNumber + ' = ' + cell . value ) ;
} ) ;
// Commit a completed row to stream
row . commit ( ) ;
// row metrics
const rowSize = row . cellCount ;
const numValues = row . actualCellCount ;
// Add a couple of Rows by key-value, after the last current row, using the column keys
worksheet . addRow ( { id : 1 , name : 'John Doe' , dob : new Date ( 1970 , 1 , 1 ) } ) ;
worksheet . addRow ( { id : 2 , name : 'Jane Doe' , dob : new Date ( 1965 , 1 , 7 ) } ) ;
// Add a row by contiguous Array (assign to columns A, B & C)
worksheet . addRow ( [ 3 , 'Sam' , new Date ( ) ] ) ;
// Add a row by sparse Array (assign to columns A, E & I)
const rowValues = [ ] ;
rowValues [ 1 ] = 4 ;
rowValues [ 5 ] = 'Kyle' ;
rowValues [ 9 ] = new Date ( ) ;
worksheet . addRow ( rowValues ) ;
// Add a row with inherited style
// This new row will have same style as last row
// And return as row object
const newRow = worksheet . addRow ( rowValues , 'i' ) ;
// Add an array of rows
const rows = [
[ 5 , 'Bob' , new Date ( ) ] , // row by array
{ id : 6 , name : 'Barbara' , dob : new Date ( ) }
] ;
// add new rows and return them as array of row objects
const newRows = worksheet . addRows ( rows ) ;
// Add an array of rows with inherited style
// These new rows will have same styles as last row
// and return them as array of row objects
const newRowsStyled = worksheet . addRows ( rows , 'i' ) ;
Параметр | Описание | Значение по умолчанию |
---|---|---|
ценности | Новые значения строк/строк | |
стиль | «i» для наследования от строки выше, «i+» для включения пустых ячеек, «n» для отсутствия ячеек | 'н' |
const cell = worksheet . getCell ( 'C3' ) ;
// Modify/Add individual cell
cell . value = new Date ( 1968 , 5 , 1 ) ;
// query a cell's type
expect ( cell . type ) . toEqual ( Excel . ValueType . Date ) ;
// use string value of cell
myInput . value = cell . text ;
// use html-safe string for rendering...
const html = '<div>' + cell . html + '</div>' ;
// merge a range of cells
worksheet . mergeCells ( 'A4:B5' ) ;
// ... merged cells are linked
worksheet . getCell ( 'B5' ) . value = 'Hello, World!' ;
expect ( worksheet . getCell ( 'B5' ) . value ) . toBe ( worksheet . getCell ( 'A4' ) . value ) ;
expect ( worksheet . getCell ( 'B5' ) . master ) . toBe ( worksheet . getCell ( 'A4' ) ) ;
// ... merged cells share the same style object
expect ( worksheet . getCell ( 'B5' ) . style ) . toBe ( worksheet . getCell ( 'A4' ) . style ) ;
worksheet . getCell ( 'B5' ) . style . font = myFonts . arial ;
expect ( worksheet . getCell ( 'A4' ) . style . font ) . toBe ( myFonts . arial ) ;
// unmerging the cells breaks the style links
worksheet . unMergeCells ( 'A4' ) ;
expect ( worksheet . getCell ( 'B5' ) . style ) . not . toBe ( worksheet . getCell ( 'A4' ) . style ) ;
expect ( worksheet . getCell ( 'B5' ) . style . font ) . not . toBe ( myFonts . arial ) ;
// merge by top-left, bottom-right
worksheet . mergeCells ( 'K10' , 'M12' ) ;
// merge by start row, start column, end row, end column (equivalent to K10:M12)
worksheet . mergeCells ( 10 , 11 , 12 , 13 ) ;
insertRow ( pos , value , style = 'n' )
insertRows ( pos , values , style = 'n' )
// Insert a couple of Rows by key-value, shifting down rows every time
worksheet . insertRow ( 1 , { id : 1 , name : 'John Doe' , dob : new Date ( 1970 , 1 , 1 ) } ) ;
worksheet . insertRow ( 1 , { id : 2 , name : 'Jane Doe' , dob : new Date ( 1965 , 1 , 7 ) } ) ;
// Insert a row by contiguous Array (assign to columns A, B & C)
worksheet . insertRow ( 1 , [ 3 , 'Sam' , new Date ( ) ] ) ;
// Insert a row by sparse Array (assign to columns A, E & I)
var rowValues = [ ] ;
rowValues [ 1 ] = 4 ;
rowValues [ 5 ] = 'Kyle' ;
rowValues [ 9 ] = new Date ( ) ;
// insert new row and return as row object
const insertedRow = worksheet . insertRow ( 1 , rowValues ) ;
// Insert a row, with inherited style
// This new row will have same style as row on top of it
// And return as row object
const insertedRowInherited = worksheet . insertRow ( 1 , rowValues , 'i' ) ;
// Insert a row, keeping original style
// This new row will have same style as it was previously
// And return as row object
const insertedRowOriginal = worksheet . insertRow ( 1 , rowValues , 'o' ) ;
// Insert an array of rows, in position 1, shifting down current position 1 and later rows by 2 rows
var rows = [
[ 5 , 'Bob' , new Date ( ) ] , // row by array
{ id : 6 , name : 'Barbara' , dob : new Date ( ) }
] ;
// insert new rows and return them as array of row objects
const insertedRows = worksheet . insertRows ( 1 , rows ) ;
// Insert an array of rows, with inherited style
// These new rows will have same style as row on top of it
// And return them as array of row objects
const insertedRowsInherited = worksheet . insertRows ( 1 , rows , 'i' ) ;
// Insert an array of rows, keeping original style
// These new rows will have same style as it was previously in 'pos' position
const insertedRowsOriginal = worksheet . insertRows ( 1 , rows , 'o' ) ;
Параметр | Описание | Значение по умолчанию |
---|---|---|
позиция | Номер строки, в которую вы хотите вставить, нажав все строки оттуда. | |
ценности | Новые значения строк/строк | |
стиль | «i» для наследования от строки выше, «i+» для включения пустых ячеек, «o» для исходного стиля, «o+» для включения пустых ячеек, «n» для отсутствия | 'н' |
// Cut one or more rows (rows below are shifted up)
// Known Issue: If a splice causes any merged cells to move, the results may be unpredictable
worksheet . spliceRows ( 4 , 3 ) ;
// remove one row and insert two more.
// Note: rows 4 and below will be shifted down by 1 row.
const newRow3Values = [ 1 , 2 , 3 , 4 , 5 ] ;
const newRow4Values = [ 'one' , 'two' , 'three' , 'four' , 'five' ] ;
worksheet . spliceRows ( 3 , 1 , newRow3Values , newRow4Values ) ;
// Cut one or more cells (cells to the right are shifted left)
// Note: this operation will not affect other rows
row . splice ( 3 , 2 ) ;
// remove one cell and insert two more (cells to the right of the cut cell will be shifted right)
row . splice ( 4 , 1 , 'new value 1' , 'new value 2' ) ;
Параметр | Описание | Значение по умолчанию |
---|---|---|
начинать | Начальная точка сращивания | |
считать | Количество строк/ячейок для удаления | |
...вставки | Новые значения строки/ячейки для вставки |
duplicateRow ( start , amount = 1 , insert = true )
const wb = new ExcelJS . Workbook ( ) ;
const ws = wb . addWorksheet ( 'duplicateTest' ) ;
ws . getCell ( 'A1' ) . value = 'One' ;
ws . getCell ( 'A2' ) . value = 'Two' ;
ws . getCell ( 'A3' ) . value = 'Three' ;
ws . getCell ( 'A4' ) . value = 'Four' ;
// This line will duplicate the row 'One' twice but it will replace rows 'Two' and 'Three'
// if third param was true so it would insert 2 new rows with the values and styles of row 'One'
ws . duplicateRow ( 1 , 2 , false ) ;
Параметр | Описание | Значение по умолчанию |
---|---|---|
начинать | Номер строки, которую вы хотите дублировать (первая строка в Excel — 1). | |
количество | Время, когда вы хотите дублировать строку | 1 |
вставлять | true , если вы хотите вставить новые строки для дубликатов, или false , если вы хотите их заменить. | истинный |
Отдельные ячейки (или несколько групп ячеек) могут иметь имена. Имена можно использовать в формулах и проверке данных (и, возможно, не только).
// assign (or get) a name for a cell (will overwrite any other names that cell had)
worksheet . getCell ( 'A1' ) . name = 'PI' ;
expect ( worksheet . getCell ( 'A1' ) . name ) . to . equal ( 'PI' ) ;
// assign (or get) an array of names for a cell (cells can have more than one name)
worksheet . getCell ( 'A1' ) . names = [ 'thing1' , 'thing2' ] ;
expect ( worksheet . getCell ( 'A1' ) . names ) . to . have . members ( [ 'thing1' , 'thing2' ] ) ;
// remove a name from a cell
worksheet . getCell ( 'A1' ) . removeName ( 'thing1' ) ;
expect ( worksheet . getCell ( 'A1' ) . names ) . to . have . members ( [ 'thing2' ] ) ;
Ячейки могут определять, какие значения действительны, а какие нет, и предлагать пользователю помощь в их выборе.
Типы проверки могут быть одним из следующих:
Тип | Описание |
---|---|
список | Определите дискретный набор допустимых значений. Excel предложит их в раскрывающемся списке для облегчения ввода. |
весь | Значение должно быть целым числом |
десятичный | Значение должно быть десятичным числом. |
длина текста | Значение может быть текстовым, но длина контролируется. |
обычай | Пользовательская формула контролирует допустимые значения. |
Для типов, отличных от списка или настраиваемого, на проверку влияют следующие операторы:
Оператор | Описание |
---|---|
между | Значения должны находиться между результатами формулы |
немежду | Значения не должны находиться между результатами формулы. |
равный | Значение должно равняться результату формулы |
notEqual | Значение не должно равняться результату формулы |
больше, чем | Значение должно быть больше результата формулы |
меньше, чем | Значение должно быть меньше результата формулы |
GreaterThanOrEqual | Значение должно быть больше или равно результату формулы. |
lessThanOrEqual | Значение должно быть меньше или равно результату формулы. |
// Specify list of valid values (One, Two, Three, Four).
// Excel will provide a dropdown with these values.
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'list' ,
allowBlank : true ,
formulae : [ '"One,Two,Three,Four"' ]
} ;
// Specify list of valid values from a range.
// Excel will provide a dropdown with these values.
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'list' ,
allowBlank : true ,
formulae : [ '$D$5:$F$5' ]
} ;
// Specify Cell must be a whole number that is not 5.
// Show the user an appropriate error message if they get it wrong
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'whole' ,
operator : 'notEqual' ,
showErrorMessage : true ,
formulae : [ 5 ] ,
errorStyle : 'error' ,
errorTitle : 'Five' ,
error : 'The value must not be Five'
} ;
// Specify Cell must be a decimal number between 1.5 and 7.
// Add 'tooltip' to help guid the user
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'decimal' ,
operator : 'between' ,
allowBlank : true ,
showInputMessage : true ,
formulae : [ 1.5 , 7 ] ,
promptTitle : 'Decimal' ,
prompt : 'The value must between 1.5 and 7'
} ;
// Specify Cell must be have a text length less than 15
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'textLength' ,
operator : 'lessThan' ,
showErrorMessage : true ,
allowBlank : true ,
formulae : [ 15 ]
} ;
// Specify Cell must be have be a date before 1st Jan 2016
worksheet . getCell ( 'A1' ) . dataValidation = {
type : 'date' ,
operator : 'lessThan' ,
showErrorMessage : true ,
allowBlank : true ,
formulae : [ new Date ( 2016 , 0 , 1 ) ]
} ;
Добавить комментарий в старом стиле к ячейке
// plain text note
worksheet . getCell ( 'A1' ) . note = 'Hello, ExcelJS!' ;
// colourful formatted note
ws . getCell ( 'B1' ) . note = {
texts : [
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 0 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : 'This is ' } ,
{ 'font' : { 'italic' : true , 'size' : 12 , 'color' : { 'theme' : 0 } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'a' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' ' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'argb' : 'FFFF6600' } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'colorful' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' text ' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'argb' : 'FFCCFFCC' } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'with' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' in-cell ' } ,
{ 'font' : { 'bold' : true , 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : 'format' } ,
] ,
margins : {
insetmode : 'custom' ,
inset : [ 0.25 , 0.25 , 0.35 , 0.35 ]
} ,
protection : {
locked : True ,
lockText : False
} ,
editAs : 'twoCells' ,
} ;
В следующей таблице определены свойства, поддерживаемые комментариями к ячейкам.
Поле | Необходимый | Значение по умолчанию | Описание |
---|---|---|---|
тексты | Да | Текст комментария | |
поля | Н | {} | Определяет значение полей для автоматических или пользовательских комментариев к ячейкам. |
защита | Н | {} | Указание статуса блокировки объектов и текста объекта с помощью атрибутов защиты |
редактировать как | Н | 'абсолютный' | Используйте атрибут «editAs», чтобы указать, как аннотация привязана к ячейке. |
Определите режим настройки полей страницы для аннотации ячейки: автоматический или пользовательский режим.
ws . getCell ( 'B1' ) . note . margins = {
insetmode : 'custom' ,
inset : [ 0.25 , 0.25 , 0.35 , 0.35 ]
}
Свойство | Необходимый | Значение по умолчанию | Описание |
---|---|---|---|
режим вставки | Н | 'авто' | Определяет, устанавливаются ли поля комментариев автоматически и используется ли значение «авто» или «пользовательское». |
вставка | Н | [0,13, 0,13, 0,25, 0,25] | Пробелы по краям комментария. Единицы измерения — сантиметр. Направление: лево, верх, право, низ. |
Примечание. Этот параметр inset
вступает в силу только в том случае, если для параметра insetmode
установлено значение «custom».
Указание статуса блокировки объектов и текста объекта с помощью атрибутов защиты.
ws . getCell ( 'B1' ) . note . protection = {
locked : 'False' ,
lockText : 'False' ,
} ;
Свойство | Необходимый | Значение по умолчанию | Описание |
---|---|---|---|
заперто | Н | 'Истинный' | Этот элемент указывает, что объект блокируется, когда лист защищен. |
замоктекст | Н | 'Истинный' | Этот элемент указывает, что текст объекта заблокирован. |
Примечание. Заблокированные объекты действительны только в том случае, если лист защищен.
Комментарии к ячейке также могут иметь свойство «editAs», которое будет контролировать привязку комментариев к ячейкам. Он может иметь одно из следующих значений:
ws . getCell ( 'B1' ) . note . editAs = 'twoCells' ;
Ценить | Описание |
---|---|
две ячейки | Он указывает, что размер и положение примечания зависят от ячеек. |
oneCells | Он указывает, что размер заметки фиксирован, а положение меняется вместе с ячейкой. |
абсолютный | Это значение по умолчанию. Комментарии не будут перемещаться или изменяться в размерах ячеек. |
Таблицы позволяют манипулировать табличными данными внутри листа.
Чтобы добавить таблицу на лист, определите модель таблицы и вызовите addTable:
// add a table to a sheet
ws . addTable ( {
name : 'MyTable' ,
ref : 'A1' ,
headerRow : true ,
totalsRow : true ,
style : {
theme : 'TableStyleDark3' ,
showRowStripes : true ,
} ,
columns : [
{ name : 'Date' , totalsRowLabel : 'Totals:' , filterButton : true } ,
{ name : 'Amount' , totalsRowFunction : 'sum' , filterButton : false } ,
] ,
rows : [
[ new Date ( '2019-07-20' ) , 70.10 ] ,
[ new Date ( '2019-07-21' ) , 70.60 ] ,
[ new Date ( '2019-07-22' ) , 70.10 ] ,
] ,
} ) ;
Примечание. Добавление таблицы на лист приведет к изменению листа путем размещения на нем заголовков и данных строк. Любые данные на листе, охватываемом результирующей таблицей (включая заголовки и итоги), будут перезаписаны.
В следующей таблице определены свойства, поддерживаемые таблицами.
Свойство таблицы | Описание | Необходимый | Значение по умолчанию |
---|---|---|---|
имя | Название таблицы | Да | |
отображаемое имя | Отображаемое имя таблицы | Н | имя |
ссылка | Верхняя левая ячейка таблицы | Да | |
заголовокстрока | Показывать заголовки вверху таблицы | Н | истинный |
итогистрока | Показывать итоги внизу таблицы | Н | ЛОЖЬ |
стиль | Дополнительные свойства стиля | Н | {} |
столбцы | Определения столбцов | Да | |
ряды | Строки данных | Да |
В следующей таблице определены свойства, поддерживаемые свойством стиля таблицы.
Свойство стиля | Описание | Необходимый | Значение по умолчанию |
---|---|---|---|
тема | Цветовая тема стола | Н | 'Таблестилемедиум2' |
показатьFirstColumn | Выделите первый столбец (жирный) | Н | ЛОЖЬ |
showLastColumn | Выделите последний столбец (жирным шрифтом) | Н | ЛОЖЬ |
showRowStripes | Альтернативные строки показаны цветом фона | Н | ЛОЖЬ |
showColumnStripes | Альтернативные строки показаны цветом фона. | Н | ЛОЖЬ |
В следующей таблице определены свойства, поддерживаемые в каждом столбце таблицы.
Свойство столбца | Описание | Необходимый | Значение по умолчанию |
---|---|---|---|
имя | Имя столбца, также используемое в заголовке | Да | |
кнопка фильтра | Переключает управление фильтром в заголовке | Н | ЛОЖЬ |
итогиRowLabel | Метка для описания строки итогов (первый столбец) | Н | 'Общий' |
итогистрокафункция | Имя итоговой функции | Н | 'никто' |
итогистрокаформула | Дополнительная формула для пользовательских функций | Н |
В следующей таблице перечислены допустимые значения свойства totalsRowFunction, определенного столбцами. Если используется какое-либо значение, кроме «пользовательского», нет необходимости включать связанную формулу, поскольку она будет вставлена в таблицу.
Итоговые функции | Описание |
---|---|
никто | Для этого столбца нет функции итогов |
средний | Вычислить среднее значение для столбца |
countNums | Подсчитайте записи, которые являются числами |
считать | Количество записей |
Макс | Максимальное значение в этом столбце |
мин | Минимальное значение в этом столбце |
стандартное отклонение | Стандартное отклонение для этого столбца |
вар | Отклонение для этого столбца |
сумма | Сумма записей для этого столбца |
обычай | Пользовательская формула. Требуется связанное значение totalsRowFormula. |
Допустимые имена тем соответствуют следующему шаблону:
Оттенки, цифры могут быть одними из:
Если тема отсутствует, используйте значение null.
Примечание. Exceljs пока не поддерживает пользовательские темы таблиц.
Таблицы поддерживают набор функций манипуляции, которые позволяют добавлять или удалять данные, а также изменять некоторые свойства. Поскольку многие из этих операций могут иметь последствия на листе, изменения необходимо зафиксировать после завершения.
Все значения индекса в таблице начинаются с нуля, поэтому номер первой строки и номер первого столбца равны 0.
Добавление или удаление заголовков и итогов
const table = ws . getTable ( 'MyTable' ) ;
// turn header row on
table . headerRow = true ;
// turn totals row off
table . totalsRow = false ;
// commit the table changes into the sheet
table . commit ( ) ;
Перемещение таблицы
const table = ws . getTable ( 'MyTable' ) ;
// table top-left move to D4
table . ref = 'D4' ;
// commit the table changes into the sheet
table . commit ( ) ;
Добавление и удаление строк
const table = ws . getTable ( 'MyTable' ) ;
// remove first two rows
table . removeRows ( 0 , 2 ) ;
// insert new rows at index 5
table . addRow ( [ new Date ( '2019-08-05' ) , 5 , 'Mid' ] , 5 ) ;
// append new row to bottom of table
table . addRow ( [ new Date ( '2019-08-10' ) , 10 , 'End' ] ) ;
// commit the table changes into the sheet
table . commit ( ) ;
Добавление и удаление столбцов
const table = ws . getTable ( 'MyTable' ) ;
// remove second column
table . removeColumns ( 1 , 1 ) ;
// insert new column (with data) at index 1
table . addColumn (
{ name : 'Letter' , totalsRowFunction : 'custom' , totalsRowFormula : 'ROW()' , totalsRowResult : 6 , filterButton : true } ,
[ 'a' , 'b' , 'c' , 'd' ] ,
2
) ;
// commit the table changes into the sheet
table . commit ( ) ;
Изменить свойства столбца
const table = ws . getTable ( 'MyTable' ) ;
// Get Column Wrapper for second column
const column = table . getColumn ( 1 ) ;
// set some properties
column . name = 'Code' ;
column . filterButton = true ;
column . style = { font : { bold : true , name : 'Comic Sans MS' } } ;
column . totalsRowLabel = 'Totals' ;
column . totalsRowFunction = 'custom' ;
column . totalsRowFormula = 'ROW()' ;
column . totalsRowResult = 10 ;
// commit the table changes into the sheet
table . commit ( ) ;
Ячейки, строки и столбцы поддерживают богатый набор стилей и форматов, влияющих на отображение ячеек.
Стили задаются путем назначения следующих свойств:
// assign a style to a cell
ws . getCell ( 'A1' ) . numFmt = '0.00%' ;
// Apply styles to worksheet columns
ws . columns = [
{ header : 'Id' , key : 'id' , width : 10 } ,
{ header : 'Name' , key : 'name' , width : 32 , style : { font : { name : 'Arial Black' } } } ,
{ header : 'D.O.B.' , key : 'DOB' , width : 10 , style : { numFmt : 'dd/mm/yyyy' } }
] ;
// Set Column 3 to Currency Format
ws . getColumn ( 3 ) . numFmt = '"£"#,##0.00;[Red]-"£"#,##0.00' ;
// Set Row 2 to Comic Sans.
ws . getRow ( 2 ) . font = { name : 'Comic Sans MS' , family : 4 , size : 16 , underline : 'double' , bold : true } ;
Когда стиль применяется к строке или столбцу, он будет применен ко всем существующим на данный момент ячейкам в этой строке или столбце. Кроме того, любая новая создаваемая ячейка унаследует свои первоначальные стили от строки и столбца, к которым она принадлежит.
Если и строка, и столбец ячейки определяют определенный стиль (например, шрифт), ячейка будет использовать стиль строки вместо стиля столбца. Однако если строка и столбец определяют разные стили (например, columns.numFmt и row.font), ячейка унаследует шрифт из строки и numFmt из столбца.
Предостережение: все вышеперечисленные свойства (за исключением numFmt, которое является строкой) являются объектными структурами JS. Если один и тот же объект стиля назначен более чем одному объекту электронной таблицы, каждый объект будет использовать один и тот же объект стиля. Если объект стиля будет изменен позднее до сериализации электронной таблицы, то все объекты, ссылающиеся на этот объект стиля, также будут изменены. Такое поведение предназначено для повышения приоритета производительности за счет уменьшения количества создаваемых объектов JS. Если вы хотите, чтобы объекты стиля были независимыми, вам необходимо клонировать их перед назначением. Кроме того, по умолчанию, когда документ читается из файла (или потока), если объекты электронной таблицы имеют схожие стили, они также будут ссылаться на один и тот же объект стиля.
// display value as '1 3/5'
ws . getCell ( 'A1' ) . value = 1.6 ;
ws . getCell ( 'A1' ) . numFmt = '# ?/?' ;
// display value as '1.60%'
ws . getCell ( 'B1' ) . value = 0.016 ;
ws . getCell ( 'B1' ) . numFmt = '0.00%' ;
// for the wannabe graphic designers out there
ws . getCell ( 'A1' ) . font = {
name : 'Comic Sans MS' ,
family : 4 ,
size : 16 ,
underline : true ,
bold : true
} ;
// for the graduate graphic designers...
ws . getCell ( 'A2' ) . font = {
name : 'Arial Black' ,
color : { argb : 'FF00FF00' } ,
family : 2 ,
size : 14 ,
italic : true
} ;
// for the vertical align
ws . getCell ( 'A3' ) . font = {
vertAlign : 'superscript'
} ;
// note: the cell will store a reference to the font object assigned.
// If the font object is changed afterwards, the cell font will change also...
const font = { name : 'Arial' , size : 12 } ;
ws . getCell ( 'A3' ) . font = font ;
font . size = 20 ; // Cell A3 now has font size 20!
// Cells that share similar fonts may reference the same font object after
// the workbook is read from file or stream
Свойство шрифта | Описание | Пример значения(й) |
---|---|---|
имя | Название шрифта. | «Ариал», «Калибри» и др. |
семья | Семейство шрифтов для резервного варианта. Целочисленное значение. | 1 - с засечками, 2 - без засечек, 3 - моно, другие - неизвестно |
схема | Шрифтовая схема. | «незначительный», «значительный», «нет» |
кодировка | Кодировка шрифта. Целочисленное значение. | 1, 2 и т. д. |
размер | Размер шрифта. Целочисленное значение. | 9, 10, 12, 16 и т. д. |
цвет | Описание цвета, объект, содержащий значение ARGB. | { аргумент: 'FFFF0000'} |
смелый | Вес шрифта | правда, ложь |
курсив | Наклон шрифта | правда, ложь |
подчеркнуть | Стиль подчеркивания шрифта | true, false, «нет», «одиночный», «двойной», «singleAccounting», «doubleAccounting» |
ударять | | правда, ложь |
контур | Контур шрифта | правда, ложь |
вертальтайн | Вертикальное выравнивание | 'надстрочный индекс', 'нижний индекс' |
// set cell alignment to top-left, middle-center, bottom-right
ws . getCell ( 'A1' ) . alignment = { vertical : 'top' , horizontal : 'left' } ;
ws . getCell ( 'B1' ) . alignment = { vertical : 'middle' , horizontal : 'center' } ;
ws . getCell ( 'C1' ) . alignment = { vertical : 'bottom' , horizontal : 'right' } ;
// set cell to wrap-text
ws . getCell ( 'D1' ) . alignment = { wrapText : true } ;
// set cell indent to 1
ws . getCell ( 'E1' ) . alignment = { indent : 1 } ;
// set cell text rotation to 30deg upwards, 45deg downwards and vertical text
ws . getCell ( 'F1' ) . alignment = { textRotation : 30 } ;
ws . getCell ( 'G1' ) . alignment = { textRotation : - 45 } ;
ws . getCell ( 'H1' ) . alignment = { textRotation : 'vertical' } ;
Допустимые значения свойств трассы
горизонтальный | вертикальный | обернутьтекст | сжимать по размеру | отступ | чтениеЗаказ | textRotation |
---|---|---|---|---|---|---|
левый | вершина | истинный | истинный | целое число | ртл | от 0 до 90 |
центр | середина | ЛОЖЬ | ЛОЖЬ | литр | от -1 до -90 | |
верно | нижний | вертикальный | ||||
наполнять | распределенный | |||||
оправдывать | оправдывать | |||||
центрнепрерывный | ||||||
распределенный |
// set single thin border around A1
ws . getCell ( 'A1' ) . border = {
top : { style : 'thin' } ,
left : { style : 'thin' } ,
bottom : { style : 'thin' } ,
right : { style : 'thin' }
} ;
// set double thin green border around A3
ws . getCell ( 'A3' ) . border = {
top : { style : 'double' , color : { argb : 'FF00FF00' } } ,
left : { style : 'double' , color : { argb : 'FF00FF00' } } ,
bottom : { style : 'double' , color : { argb : 'FF00FF00' } } ,
right : { style : 'double' , color : { argb : 'FF00FF00' } }
} ;
// set thick red cross in A5
ws . getCell ( 'A5' ) . border = {
diagonal : { up : true , down : true , style : 'thick' , color : { argb : 'FFFF0000' } }
} ;
Допустимые стили границ
// fill A1 with red darkVertical stripes
ws . getCell ( 'A1' ) . fill = {
type : 'pattern' ,
pattern : 'darkVertical' ,
fgColor : { argb : 'FFFF0000' }
} ;
// fill A2 with yellow dark trellis and blue behind
ws . getCell ( 'A2' ) . fill = {
type : 'pattern' ,
pattern : 'darkTrellis' ,
fgColor : { argb : 'FFFFFF00' } ,
bgColor : { argb : 'FF0000FF' }
} ;
// fill A3 with solid coral
ws . getCell ( 'A3' ) . fill = {
type : 'pattern' ,
pattern : 'solid' ,
fgColor : { argb : 'F08080' } ,
} ;
// fill A4 with blue-white-blue gradient from left to right
ws . getCell ( 'A4' ) . fill = {
type : 'gradient' ,
gradient : 'angle' ,
degree : 0 ,
stops : [
{ position : 0 , color : { argb : 'FF0000FF' } } ,
{ position : 0.5 , color : { argb : 'FFFFFFFF' } } ,
{ position : 1 , color : { argb : 'FF0000FF' } }
]
} ;
// fill A5 with red-green gradient from center
ws . getCell ( 'A5' ) . fill = {
type : 'gradient' ,
gradient : 'path' ,
center : { left : 0.5 , top : 0.5 } ,
stops : [
{ position : 0 , color : { argb : 'FFFF0000' } } ,
{ position : 1 , color : { argb : 'FF00FF00' } }
]
} ;
Свойство | Необходимый | Описание |
---|---|---|
тип | Да | Значение: 'шаблон' Указывает, что эта заливка использует узоры. |
шаблон | Да | Указывает тип шаблона (см. допустимые типы шаблонов ниже). |
fgColor | Н | Определяет цвет переднего плана узора. По умолчанию черный. |
bgColor | Н | Определяет цвет фона узора. По умолчанию белый. |
Примечание. Если вы хотите заполнить ячейку solid
узором, вам не нужно указывать bgColor
. См. пример выше для ячейки A3
со solid
узором и коралловым цветом fgColor
.
Допустимые типы шаблонов
Свойство | Необходимый | Описание |
---|---|---|
тип | Да | Значение: «градиент» Указывает, что эта заливка использует градиенты. |
градиент | Да | Указывает тип градиента. Один из ['угол', 'путь'] |
степень | угол | Для градиента «Угол» указывает направление градиента. 0 — слева направо. Значения от 1 до 359 вращают направление по часовой стрелке. |
центр | путь | Для градиента «пути». Указывает относительные координаты начала пути. Значения «left» и «top» варьируются от 0 до 1. |
останавливается | Да | Определяет последовательность цветов градиента. Представляет собой массив объектов, содержащих позицию и цвет, начиная с позиции 0 и заканчивая позицией 1. Промежуточные позиции можно использовать для указания других цветов на пути. |
Предостережения
Используя интерфейс выше, можно создавать эффекты градиентной заливки, которые невозможно использовать в программе-редакторе XLSX. Например, Excel поддерживает только угловые градиенты 0, 45, 90 и 135. Аналогичным образом последовательность остановок также может быть ограничена пользовательским интерфейсом с позициями [0,1] или [0,0.5,1] в качестве единственных параметров. Будьте осторожны с этой заливкой, чтобы убедиться, что она поддерживается целевыми зрителями XLSX.
Отдельные ячейки теперь поддерживают форматированный текст или форматирование внутри ячеек. Значения форматированного текста могут управлять свойствами шрифта любого количества подстрок внутри текстового значения. См. «Шрифты» для получения полного списка сведений о поддерживаемых свойствах шрифтов.
ws . getCell ( 'A1' ) . value = {
'richText' : [
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 0 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : 'This is ' } ,
{ 'font' : { 'italic' : true , 'size' : 12 , 'color' : { 'theme' : 0 } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'a' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' ' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'argb' : 'FFFF6600' } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'colorful' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' text ' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'argb' : 'FFCCFFCC' } , 'name' : 'Calibri' , 'scheme' : 'minor' } , 'text' : 'with' } ,
{ 'font' : { 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : ' in-cell ' } ,
{ 'font' : { 'bold' : true , 'size' : 12 , 'color' : { 'theme' : 1 } , 'name' : 'Calibri' , 'family' : 2 , 'scheme' : 'minor' } , 'text' : 'format' }
]
} ;
expect ( ws . getCell ( 'A1' ) . text ) . to . equal ( 'This is a colorful text with in-cell format' ) ;
expect ( ws . getCell ( 'A1' ) . type ) . to . equal ( Excel . ValueType . RichText ) ;
Защита на уровне ячейки может быть изменена с помощью свойства Protection.
ws . getCell ( 'A1' ) . protection = {
locked : false ,
hidden : true ,
} ;
Поддерживаемые свойства защиты
Свойство | По умолчанию | Описание |
---|---|---|
заперто | истинный | Указывает, будет ли заблокирована ячейка, если лист защищен. |
скрытый | ЛОЖЬ | Указывает, будет ли видна формула ячейки, если лист защищен. |
Условное форматирование позволяет отображать на листе определенные стили, значки и т. д. в зависимости от значений ячеек или любой произвольной формулы.
Правила условного форматирования добавляются на уровне листа и обычно охватывают диапазон ячеек.
К данному диапазону ячеек можно применить несколько правил, и каждое правило будет применять свой собственный стиль.
Если на данную ячейку влияет несколько правил, значение приоритета правила будет определять, какое правило выиграет, если конкурирующие стили столкнутся. Правило с меньшим значением приоритета побеждает. Если значения приоритета не указаны для данного правила, ExcelJS назначит их в порядке возрастания.
Примечание. В настоящее время поддерживается только часть правил условного форматирования. В частности, только те правила форматирования, которые не требуют рендеринга XML внутри элемента <extLst>. Это означает, что наборы данных и три конкретных набора значков (3 треугольника, 3 звезды, 5 блоков) не поддерживаются.
// add a checkerboard pattern to A1:E7 based on row + col being even or odd
worksheet . addConditionalFormatting ( {
ref : 'A1:E7' ,
rules : [
{
type : 'expression' ,
formulae : [ 'MOD(ROW()+COLUMN(),2)=0' ] ,
style : { fill : { type : 'pattern' , pattern : 'solid' , bgColor : { argb : 'FF00FF00' } } } ,
}
]
} )
Поддерживаемые типы правил условного форматирования
Тип | Описание |
---|---|
выражение | Для активации правила можно использовать любую пользовательскую функцию. |
ячейка | Сравнивает значение ячейки с предоставленной формулой, используя указанный оператор. |
топ10 | Применяет форматирование к ячейкам со значениями в верхнем (или нижнем) диапазоне. |
выше среднего | Применяет форматирование к ячейкам со значениями выше (или ниже) среднего. |
ЦветШкала | Применяет цветной фон к ячейкам в зависимости от того, где находятся их значения в диапазоне. |
iconSet | Добавляет в ячейки один из нескольких значков в зависимости от значения. |
содержиттекст | Применяет форматирование в зависимости от того, содержит ли ячейка определенный текст |
времяпериод | Применяет форматирование на основе того, находится ли значение даты и времени ячейки в пределах указанного диапазона. |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'выражение' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
формулы | массив из 1 строки формулы, которая возвращает значение true/false. Чтобы сослаться на значение ячейки, используйте адрес ячейки в верхнем левом углу. | ||
стиль | структура стиля, которая будет применяться, если формула возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'ячейка' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
оператор | как сравнить значение ячейки с результатом формулы | ||
формулы | массив из 1 строки формулы, которая возвращает значение для сравнения с каждой ячейкой | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Ячейка – это операторы
Оператор | Описание |
---|---|
равный | Применить формат, если значение ячейки равно значению формулы |
больше, чем | Применить формат, если значение ячейки больше значения формулы |
меньше, чем | Применить формат, если значение ячейки меньше значения формулы |
между | Применить формат, если значение ячейки находится между двумя значениями формулы (включительно) |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'топ10' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
классифицировать | Да | 10 | указывает, сколько верхних (или нижних) значений включается в форматирование |
процент | Да | ЛОЖЬ | если true, поле ранга представляет собой процент, а не абсолют |
нижний | Да | ЛОЖЬ | если true, вместо верхних значений включаются нижние значения |
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'выше среднего' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
выше среднего | Да | ЛОЖЬ | если true, поле ранга представляет собой процент, а не абсолют |
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'colorScale' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
cfvo | массив от 2 до 5 объектов значений условного форматирования, определяющих путевые точки в диапазоне значений | ||
цвет | соответствующий массив цветов для использования в заданных точках пути | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'iconSet' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
iconSet | Да | 3Светофоры | имя набора значков для использования |
ШоуВалуе | истинный | Указывает, отображают ли ячейки в примененном диапазоне значок и значение ячейки или только значок. | |
обеспечить регресс | ЛОЖЬ | Указывает, отображаются ли значки в наборе значков, указанном в iconSet, в резервном порядке. Если custom равно «true», это значение следует игнорировать. | |
обычай | ЛОЖЬ | Указывает, используется ли пользовательский набор значков. | |
cfvo | массив от 2 до 5 объектов значений условного форматирования, определяющих путевые точки в диапазоне значений | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'DataBar' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
миндлина | 0 | Указывает длину самой короткой панели данных в этом диапазоне условного форматирования. | |
максимальная длина | 100 | Указывает длину самой длинной панели данных в этом диапазоне условного форматирования. | |
ШоуВалуе | истинный | Указывает, отображают ли ячейки в диапазоне условного форматирования одновременно панель данных и числовое значение или панель данных. | |
градиент | истинный | Указывает, имеет ли панель данных градиентную заливку. | |
граница | истинный | Указывает, имеет ли панель данных границу. | |
отрицательныйBarColorSameAsPositive | истинный | Указывает, имеет ли гистограмма цвет отрицательной полосы, отличающийся от цвета положительной полосы. | |
отрицательныйBarBorderColorSameAsPositive | истинный | Указывает, имеет ли гистограмма цвет отрицательной границы, отличный от цвета положительной границы. | |
осьПозиция | 'авто' | Указывает положение оси для панели данных. | |
направление | 'лево-право' | Определяет направление гистограммы данных | |
cfvo | массив от 2 до 5 объектов значений условного форматирования, определяющих путевые точки в диапазоне значений | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'содержиттекст' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
оператор | тип сравнения текста | ||
текст | текст для поиска | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Содержит текстовые операторы
Оператор | Описание |
---|---|
содержиттекст | Применить формат, если значение ячейки содержит значение, указанное в поле «текст». |
содержит пробелы | Применить формат, если значение ячейки содержит пробелы |
notContainsBlanks | Применить формат, если значение ячейки не содержит пробелов |
содержит ошибки | Применить формат, если значение ячейки содержит ошибки |
notContainsErrors | Применить формат, если значение ячейки не содержит ошибок |
Поле | Необязательный | По умолчанию | Описание |
---|---|---|---|
тип | 'timePeriod' | ||
приоритет | Да | <авто> | определяет приоритетный порядок стилей |
времяпериод | с каким периодом времени сравнивать значение ячейки | ||
стиль | структура стиля, которая будет применяться, если сравнение возвращает true |
Периоды времени
Период времени | Описание |
---|---|
на прошлой неделе | Применить формат, если значение ячейки попадает на последнюю неделю |
На этой неделе | Применить формат, если значение ячейки попадает на эту неделю |
на следующей неделе | Применить формат, если значение ячейки упадет на следующей неделе |
вчера | Применить формат, если значение ячейки равно вчерашнему |
сегодня | Применить формат, если значение ячейки равно сегодняшнему дню |
завтра | Применить формат, если значение ячейки равно завтрашнему дню |
последние7 дней | Применить формат, если значение ячейки попадает в течение последних 7 дней. |
последний месяц | Применить формат, если значение ячейки выпадает за последний месяц |
в этом месяце | Применить формат, если значение ячейки попадает в этот месяц |
следующий месяц | Применить формат, если значение ячейки упадет в следующем месяце |
Excel поддерживает структурирование; где строки или столбцы можно развернуть или свернуть в зависимости от уровня детализации, который хочет просмотреть пользователь.
Уровни структуры можно определить в настройке столбца:
worksheet . columns = [
{ header : 'Id' , key : 'id' , width : 10 } ,
{ header : 'Name' , key : 'name' , width : 32 } ,
{ header : 'D.O.B.' , key : 'DOB' , width : 10 , outlineLevel : 1 }
] ;
Или непосредственно в строке или столбце
worksheet . getColumn ( 3 ) . outlineLevel = 1 ;
worksheet . getRow ( 3 ) . outlineLevel = 1 ;
Уровни контура листа можно установить на листе.
// set column outline level
worksheet . properties . outlineLevelCol = 1 ;
// set row outline level
worksheet . properties . outlineLevelRow = 1 ;
Примечание. Настройка уровней структуры в строках или столбцах или уровней структуры на листе приведет к побочному эффекту, заключающемуся в изменении свойства свертывания всех строк или столбцов, на которые влияет изменение свойства. Например:
worksheet . properties . outlineLevelCol = 1 ;
worksheet . getColumn ( 3 ) . outlineLevel = 1 ;
expect ( worksheet . getColumn ( 3 ) . collapsed ) . to . be . true ;
worksheet . properties . outlineLevelCol = 2 ;
expect ( worksheet . getColumn ( 3 ) . collapsed ) . to . be . false ;
Свойства контура можно установить на листе.
worksheet . properties . outlineProperties = {
summaryBelow : false ,
summaryRight : false ,
} ;
Добавление изображений на лист представляет собой двухэтапный процесс. Сначала изображение добавляется в книгу с помощью функции addImage(), которая также возвращает значение imageId. Затем, используя imageId, изображение можно добавить на лист либо в качестве мозаичного фона, либо в виде покрытия диапазона ячеек.
Примечание. В этой версии настройка или преобразование изображения не поддерживается, а изображения не поддерживаются в потоковом режиме.
Функция Workbook.addImage поддерживает добавление изображений по имени файла или по буферу. Обратите внимание, что в обоих случаях необходимо указать расширение. Допустимые значения расширения: «jpeg», «png», «gif».
// add image to workbook by filename
const imageId1 = workbook . addImage ( {
filename : 'path/to/image.jpg' ,
extension : 'jpeg' ,
} ) ;
// add image to workbook by buffer
const imageId2 = workbook . addImage ( {
buffer : fs . readFileSync ( 'path/to.image.png' ) ,
extension : 'png' ,
} ) ;
// add image to workbook by base64
const myBase64Image = "data:image/png;base64,iVBORw0KG..." ;
const imageId2 = workbook . addImage ( {
base64 : myBase64Image ,
extension : 'png' ,
} ) ;
Используя идентификатор изображения из Workbook.addImage, фон рабочего листа можно установить с помощью функции addBackgroundImage.
// set background
worksheet . addBackgroundImage ( imageId1 ) ;
Используя идентификатор изображения из Workbook.addImage, изображение можно внедрить в лист, чтобы охватить определенный диапазон. Координаты, рассчитанные на основе диапазона, будут охватывать область от левого верхнего угла первой ячейки до правого нижнего угла второй.
// insert an image over B2:D6
worksheet . addImage ( imageId2 , 'B2:D6' ) ;
Используя структуру вместо строки диапазона, можно частично покрыть ячейки.
Обратите внимание, что используемая для этого система координат отсчитывается от нуля, поэтому верхний левый угол A1 будет { col: 0, row: 0 }. Фракции ячеек могут быть указаны с использованием чисел плавающей запятой, например, средняя точка A1 составляет {Col: 0,5, ряд: 0,5}.
// insert an image over part of B2:D6
worksheet . addImage ( imageId2 , {
tl : { col : 1.5 , row : 1.5 } ,
br : { col : 3.5 , row : 5.5 }
} ) ;
Диапазон ячеек также может иметь свойство «редактирование», которое будет контролировать, как изображение закреплено на ячейке (ы), которое может иметь одно из следующих значений:
Ценить | Описание |
---|---|
неопределенный | Это указывает, что изображение будет перемещено и размером с ячейки |
OneCell | Это дефолт. Изображение будет перемещено с клетками, но не размером |
абсолютный | Изображение не будет перемещено или размером с ячейки |
ws . addImage ( imageId , {
tl : { col : 0.1125 , row : 0.4 } ,
br : { col : 2.101046875 , row : 3.4 } ,
editAs : 'oneCell'
} ) ;
Вы можете добавить изображение в ячейку, а затем определить его ширину и высоту в пикселях при 96DPI.
worksheet . addImage ( imageId2 , {
tl : { col : 0 , row : 0 } ,
ext : { width : 500 , height : 200 }
} ) ;
Вы можете добавить изображение с гиперссылками в ячейку и определить гиперссылки в диапазоне изображений.
worksheet . addImage ( imageId2 , {
tl : { col : 0 , row : 0 } ,
ext : { width : 500 , height : 200 } ,
hyperlinks : {
hyperlink : 'http://www.somewhere.com' ,
tooltip : 'http://www.somewhere.com'
}
} ) ;
Рабочие листы могут быть защищены от модификации, добавив пароль.
await worksheet . protect ( 'the-password' , options ) ;
Защита рабочего листа также может быть удалена:
worksheet . unprotect ( ) ;
Смотрите защиту ячеек для получения подробной информации о том, как изменить отдельную защиту ячейки.
ПРИМЕЧАНИЕ. Хотя функция Protect () возвращает обещание, указывающее, что она является асинхронной, текущая реализация работает на основном потоке и будет использовать около 600 мс на среднем процессоре. Это может быть скорректировано, установив Spincount, который может быть использован для того, чтобы процесс либо быстрее, так и более устойчивым.
Поле | По умолчанию | Описание |
---|---|---|
selectlockedcells | истинный | Позволяет пользователю выбирать заблокированные ячейки |
selectunlockedcells | истинный | Позволяет пользователю выбирать разблокированные ячейки |
ФОРМАТИКА | ЛОЖЬ | Позволяет ячейки формата пользователя |
Форматколлы | ЛОЖЬ | Позволяет пользовательскому формату столбцам |
Форматровы | ЛОЖЬ | Позволяет пользователю формат строки |
вставки | ЛОЖЬ | Позволяет пользователю вставлять строки |
Вставки | ЛОЖЬ | Позволяет пользователю вставить столбцы |
Вставки | ЛОЖЬ | Позволяет пользователю вставлять гиперссылки |
Деловы | ЛОЖЬ | Позволяет пользователю удалять строки |
DeleteColumns | ЛОЖЬ | Позволяет пользователю удалять столбцы |
сортировать | ЛОЖЬ | Позволяет пользователю сортировать данные |
автофильтер | ЛОЖЬ | Позволяет пользовательскому фильтру данных в таблицах |
Pivottables | ЛОЖЬ | Позволяет пользователю использовать таблицы поворота |
Spincount | 100000 | Количество хэш -итераций, выполняемых при защите или незащищенном защите |
Параметры поддерживаются при чтении файлов XLSX.
Поле | Необходимый | Тип | Описание |
---|---|---|---|
Игноореноды | Н | Множество | Список имен узлов, чтобы игнорировать при загрузке документа XLSX. Повышает производительность в некоторых ситуациях. Доступно: sheetPr , dimension , sheetViews , sheetFormatPr , cols , sheetData , autoFilter , mergeCells , rowBreaks , hyperlinks , pageMargins , dataValidations , pageSetup conditionalFormatting headerFooter , printOptions , picture , Drawertection, tableParts , sheetProtection , Extlst, Extlst drawing extLst , Print |
// read from a file
const workbook = new Excel . Workbook ( ) ;
await workbook . xlsx . readFile ( filename ) ;
// ... use workbook
// read from a stream
const workbook = new Excel . Workbook ( ) ;
await workbook . xlsx . read ( stream ) ;
// ... use workbook
// load from buffer
const workbook = new Excel . Workbook ( ) ;
await workbook . xlsx . load ( data ) ;
// ... use workbook
// using additional options
const workbook = new Excel . Workbook ( ) ;
await workbook . xlsx . load ( data , {
ignoreNodes : [
'dataValidations' // ignores the workbook's Data Validations
] ,
} ) ;
// ... use workbook
// write to a file
const workbook = createAndFillWorkbook ( ) ;
await workbook . xlsx . writeFile ( filename ) ;
// write to a stream
await workbook . xlsx . write ( stream ) ;
// write to a new buffer
const buffer = await workbook . xlsx . writeBuffer ( ) ;
Параметры поддерживаются при чтении файлов CSV.
Поле | Необходимый | Тип | Описание |
---|---|---|---|
Датаформы | Н | Множество | Укажите формат кодирования даты DayJS. |
карта | Н | Функция | Пользовательский массив. |
листовое имя | Н | Нить | Укажите имя рабочего листа. |
Парицеропции | Н | Объект | Параметры Parseoptions @Fast-CSV/Format Модуль для написания данных CSV. |
// read from a file
const workbook = new Excel . Workbook ( ) ;
const worksheet = await workbook . csv . readFile ( filename ) ;
// ... use workbook or worksheet
// read from a stream
const workbook = new Excel . Workbook ( ) ;
const worksheet = await workbook . csv . read ( stream ) ;
// ... use workbook or worksheet
// read from a file with European Dates
const workbook = new Excel . Workbook ( ) ;
const options = {
dateFormats : [ 'DD/MM/YYYY' ]
} ;
const worksheet = await workbook . csv . readFile ( filename , options ) ;
// ... use workbook or worksheet
// read from a file with custom value parsing
const workbook = new Excel . Workbook ( ) ;
const options = {
map ( value , index ) {
switch ( index ) {
case 0 :
// column 1 is string
return value ;
case 1 :
// column 2 is a date
return new Date ( value ) ;
case 2 :
// column 3 is JSON of a formula value
return JSON . parse ( value ) ;
default :
// the rest are numbers
return parseFloat ( value ) ;
}
} ,
// https://c2fo.github.io/fast-csv/docs/parsing/options
parserOptions : {
delimiter : 't' ,
quote : false ,
} ,
} ;
const worksheet = await workbook . csv . readFile ( filename , options ) ;
// ... use workbook or worksheet
Сиарсер CSV использует Fast-CSV для чтения файла CSV. FormaterOptions в параметрах, передаваемых вышеуказанной функции записи, будут переданы в модуль @Fast-CSV/Format для написания данных CSV. Пожалуйста, обратитесь к Fast-CSV Readme.md для получения подробной информации.
Даты проанализируются с использованием модуля NPM DayJS. Если массив DateFormats не поставляется, используются следующие форматы даты:
Пожалуйста, обратитесь к плагину DayJS CustomParseFormat для получения подробной информации о том, как структурировать DateFormat.
Варианты поддерживаются при написании в файл CSV.
Поле | Необходимый | Тип | Описание |
---|---|---|---|
DateFormat | Н | Нить | Укажите формат кодирования даты DayJS. |
DateUtc | Н | логическое значение | Укажите, использует ли Exceljs dayjs.utc () для преобразования часового пояса для дат анализа. |
кодирование | Н | Нить | Укажите формат кодирования файла. (Применяется только к .writeFile .) |
Включите TemptyRows | Н | логическое значение | Указывает, можно ли записано пустые ряды. |
карта | Н | Функция | Пользовательский массив.prototype.map () Функция обратного вызова для обработки значений строки. |
листовое имя | Н | Нить | Укажите имя рабочего листа. |
листовой | Н | Число | Укажите идентификатор рабочего листа. |
Formatteroptions | Н | Объект | Опции FormaterOptions @Fast-CSV/Format Модуль для написания данных CSV. |
// write to a file
const workbook = createAndFillWorkbook ( ) ;
await workbook . csv . writeFile ( filename ) ;
// write to a stream
// Be careful that you need to provide sheetName or
// sheetId for correct import to csv.
await workbook . csv . write ( stream , { sheetName : 'Page name' } ) ;
// write to a file with European Date-Times
const workbook = new Excel . Workbook ( ) ;
const options = {
dateFormat : 'DD/MM/YYYY HH:mm:ss' ,
dateUTC : true , // use utc when rendering dates
} ;
await workbook . csv . writeFile ( filename , options ) ;
// write to a file with custom value formatting
const workbook = new Excel . Workbook ( ) ;
const options = {
map ( value , index ) {
switch ( index ) {
case 0 :
// column 1 is string
return value ;
case 1 :
// column 2 is a date
return dayjs ( value ) . format ( 'YYYY-MM-DD' ) ;
case 2 :
// column 3 is a formula, write just the result
return value . result ;
default :
// the rest are numbers
return value ;
}
} ,
// https://c2fo.github.io/fast-csv/docs/formatting/options
formatterOptions : {
delimiter : 't' ,
quote : false ,
} ,
} ;
await workbook . csv . writeFile ( filename , options ) ;
// write to a new buffer
const buffer = await workbook . csv . writeBuffer ( ) ;
Ситуар CSV использует Fast-CSV для написания файла CSV. FormaterOptions в параметрах, передаваемых вышеуказанной функции записи, будут переданы в модуль @Fast-CSV/Format для написания данных CSV. Пожалуйста, обратитесь к Fast-CSV Readme.md для получения подробной информации.
Даты отформатируются с использованием модуля NPM DayJS. Если дата не поставляется, используется dayjs.iso_8601. При написании CSV вы можете предоставить логический DateUtc как верный, чтобы Exceljs анализировал дату без автоматического преобразования часового пояса с использованием dayjs.utc()
.
Файл -ввод -вывод, зарегистрированный выше, требует, чтобы в памяти была создана целая рабочая тетрадь, прежде чем файл будет записан. Несмотря на то, что он удобен, он может ограничить размер документа из -за объема требуемой памяти.
Потоковой писатель (или читатель) обрабатывает рабочую книгу или данные на листе по мере его создания, преобразуя его в форму файла по мере ее поступления. Как правило, это гораздо более эффективно для памяти, поскольку конечная следование памяти и даже промежуточные следов памяти гораздо более компактны, чем с версией документа, особенно если учесть, что объекты строки и ячейки утилизируются после их совершения.
Интерфейс к потоковой книге и рабочей листе почти такой же, как версии документа с несколькими незначительными практическими различиями:
Обратите внимание, что можно построить всю рабочую книгу без совершения каких -либо строк. Когда рабочая книга будет выполнена, все дополнительные рабочие листы (включая все незавершенные строки) будут автоматически совершены. Однако в этом случае мало будет получено по версии документа.
Потоковая рабочая книга XLSX доступна в пространстве имен Exceljs.stream.xlsx.
Конструктор принимает дополнительный объект параметров со следующими полями:
Поле | Описание |
---|---|
транслировать | Определяет поток для записи, чтобы написать рабочую книгу XLSX. |
имя файла | Если поток не указан, это поле указывает путь к файлу для записи рабочей книги XLSX. |
UseseStrings | Указывает, использовать ли общие строки в рабочей книге. По умолчанию false . |
USESTYLES | Указывает, добавлять ли стиль информацию в рабочую книгу. Стили могут добавить накладные расходы на производительность. По умолчанию false . |
молния | Варианты ZIP, которые Exceljs внутренне передают Архиверу. По умолчанию undefined . |
Если ни имени потока, ни имя файла не указаны в параметрах, писатель рабочей книги создаст объект StreamBuf, который будет хранить содержимое рабочей книги XLSX в памяти. Этот объект StreamBuf, к которому можно получить доступ через рабочую книгу свойств.
// construct a streaming XLSX workbook writer with styles and shared strings
const options = {
filename : './streamed-workbook.xlsx' ,
useStyles : true ,
useSharedStrings : true
} ;
const workbook = new Excel . stream . xlsx . WorkbookWriter ( options ) ;
В целом, интерфейс для потокового писателя XLSX совпадает с рабочей книгой документов (и рабочими листами), описанной выше, на самом деле, объекты строки, ячейки и стиля одинаковы.
Однако есть некоторые различия ...
Строительство
Как видно выше, рабочая книга, как правило, требует указания выходного потока или файла в конструкторе.
Совершение данных
Когда строка рабочего листа готова, он должен быть совершен, чтобы объект и содержимое строки могли быть освобождены. Как правило, это будет сделано, когда добавляется каждая строка ...
worksheet . addRow ( {
id : i ,
name : theName ,
etc : someOtherDetail
} ) . commit ( ) ;
Причина, по которой автор рабочего листа не совершает строки, как они добавляются, заключается в том, чтобы позволить клеткам объединяться по рядам:
worksheet . mergeCells ( 'A1:B2' ) ;
worksheet . getCell ( 'A1' ) . value = 'I am merged' ;
worksheet . getCell ( 'C1' ) . value = 'I am not' ;
worksheet . getCell ( 'C2' ) . value = 'Neither am I' ;
worksheet . getRow ( 2 ) . commit ( ) ; // now rows 1 and two are committed.
Поскольку каждый рабочий лист завершен, он также должен быть совершен:
// Finished adding data. Commit the worksheet
worksheet . commit ( ) ;
Чтобы заполнить документ XLSX, рабочая книга должна быть совершена. Если какой -либо рабочий лист в рабочей книге не будет запрещен, они будут автоматически совершены в рамках коммита рабочей книги.
// Finished the workbook.
await workbook . commit ( ) ;
// ... the stream has been written
Потоковая рабочая книга XLSX доступна в пространстве имен Exceljs.stream.xlsx.
Конструктор принимает необходимый аргумент ввода и дополнительный аргумент параметров:
Аргумент | Описание |
---|---|
Ввод (требуется) | Определяет имя файла или читаемого потока, из которого можно прочитать рабочую книгу XLSX. |
параметры (необязательно) | Указывает, как обрабатывать типы событий, возникающие во время прочтения. |
Options.Entries | Указывает, следует ли издавать записи ( 'emit' ) или нет ( 'ignore' ). По умолчанию 'emit' . |
Опции. Шагстринги | Указывает, следует ли кэшировать общие строки ( 'cache' ), которые вставляют их в соответствующие значения клеток, или излучать их ( 'emit' ) или игнорировать их ( 'ignore' ), в обоих случаях значение ячейки будет Ссылка на индекс общей строки. По умолчанию 'cache' . |
Опции.hyperlinks | Определяет, кэшируйте гиперссылки ( 'cache' ), которые вставляют их в их соответствующие ячейки, будь то их излучать ( 'emit' ) или игнорировать их ( 'ignore' ). По умолчанию 'cache' . |
Options.Styles | Определяет, следует ли кэшировать стили ( 'cache' ), который вставляет их в соответствующие ряды и ячейки, или игнорировать их ( 'ignore' ). По умолчанию 'cache' . |
Options.WorkSheets | Указывает, следует ли издавать листы рабочих листов ( 'emit' ) или нет ( 'ignore' ). По умолчанию 'emit' . |
const workbookReader = new ExcelJS . stream . xlsx . WorkbookReader ( './file.xlsx' ) ;
for await ( const worksheetReader of workbookReader ) {
for await ( const row of worksheetReader ) {
// ...
}
}
Обратите внимание, что worksheetReader
возвращает массив строк, а не каждую строку индивидуально по причинам производительности: Nodejs/Node#31979
События в рабочей книге-это «Рабочий лист», «общие страницы» и «гиперссылки». События на рабочем листе - это «ряд» и «гиперссылки».
const options = {
sharedStrings : 'emit' ,
hyperlinks : 'emit' ,
worksheets : 'emit' ,
} ;
const workbook = new ExcelJS . stream . xlsx . WorkbookReader ( './file.xlsx' , options ) ;
for await ( const { eventType , value } of workbook . parse ( ) ) {
switch ( eventType ) {
case 'shared-strings' :
// value is the shared string
case 'worksheet' :
// value is the worksheetReader
case 'hyperlinks' :
// value is the hyperlinksReader
}
}
Хотя мы настоятельно рекомендуем использовать асинхронную итерацию, мы также раскрываем потоковой интерфейс для обратной совместимости.
const options = {
sharedStrings : 'emit' ,
hyperlinks : 'emit' ,
worksheets : 'emit' ,
} ;
const workbookReader = new ExcelJS . stream . xlsx . WorkbookReader ( './file.xlsx' , options ) ;
workbookReader . read ( ) ;
workbookReader . on ( 'worksheet' , worksheet => {
worksheet . on ( 'row' , row => {
} ) ;
} ) ;
workbookReader . on ( 'shared-strings' , sharedString => {
// ...
} ) ;
workbookReader . on ( 'hyperlinks' , hyperlinksReader => {
// ...
} ) ;
workbookReader . on ( 'end' , ( ) => {
// ...
} ) ;
workbookReader . on ( 'error' , ( err ) => {
// ...
} ) ;
Часть этой библиотеки была изолирована и протестирована для использования в среде браузера.
Благодаря потоковой природе читателя рабочей книги и писателя рабочей книги, они не были включены. Можно использовать только рабочую книгу на основе документов (для получения подробной информации см. Для получения подробной информации, см. Создайте рабочую книгу).
Например, код с использованием Exceljs в браузере посмотрите на папку Spec/Browser в репо GitHub.
Следующие файлы предварительно связаны и включены в папку Dist.
Поддерживаются следующие типы значений.
Enum: Excel.valuetype.null
Нулевое значение указывает на отсутствие значения и обычно не хранится при написании в файл (за исключением объединенных ячеек). Его можно использовать для удаления значения из ячейки.
Например
worksheet . getCell ( 'A1' ) . value = null ;
Enum: Excel.valueType.merge
Ячейка слияния - это та, которая имеет свою ценность, связанную с другой «главной» ячейкой. Назначение ячейки слияния приведет к изменению мастер -ячейки.
Enum: Excel.valuetype.number
Числовое значение.
Например
worksheet . getCell ( 'A1' ) . value = 5 ;
worksheet . getCell ( 'A2' ) . value = 3.14159 ;
Enum: Excel.valueType.String
Простая текстовая строка.
Например
worksheet . getCell ( 'A1' ) . value = 'Hello, World!' ;
Enum: Excel.valueType.date
Значение даты, представленное типом даты JavaScript.
Например
worksheet . getCell ( 'A1' ) . value = new Date ( 2017 , 2 , 15 ) ;
Enum: Excel.valuetype.hyperlink
URL с текстом и значением ссылки.
Например
// link to web
worksheet . getCell ( 'A1' ) . value = {
text : 'www.mylink.com' ,
hyperlink : 'http://www.mylink.com' ,
tooltip : 'www.mylink.com'
} ;
// internal link
worksheet . getCell ( 'A1' ) . value = { text : 'Sheet2' , hyperlink : '#'Sheet2'!A1' } ;
Enum: Excel.valueType.formula
Формула Excel для расчета значений на лету. Обратите внимание, что, хотя тип ячейки будет формулой, ячейка может иметь значение эффективности, которое будет получено из значения результата.
Обратите внимание, что Exceljs не может обработать формулу для получения результата, она должна быть предоставлена.
Обратите внимание, что функции семантические имена должны быть на английском языке, а сепаратор должен быть запятой.
Например
worksheet . getCell ( 'A3' ) . value = { formula : 'A1+A2' , result : 7 } ;
worksheet . getCell ( 'A3' ) . value = { formula : 'SUM(A1,A2)' , result : 7 } ;
Клетки также поддерживают удобные добычи для доступа к формуле и результату:
worksheet . getCell ( 'A3' ) . formula === 'A1+A2' ;
worksheet . getCell ( 'A3' ) . result === 7 ;
Общие формулы усиливают сжатие документа XLSX за счет уменьшения повторения текста на рабочем листе XML. Верхняя левая ячейка в диапазоне является назначенным мастером и будет держать формулу, из которой будут происходить все остальные ячейки в диапазоне. Другие «подчиненные» ячейки могут затем ссылаться на эту главную ячейку вместо того, чтобы снова переопределить всю формулу. Обратите внимание, что главная формула будет переведена в рабские ячейки обычным модом Excel, так что ссылки на другие ячейки будут смещены вниз и справа в зависимости от смещения рабов к мастеру. Например: если в главной ячейке A2 есть формула, ссылающаяся на A1, то, если ячейка B2 использует формулу A2, то она будет ссылаться на B1.
Основная формула может быть назначена ячейке вместе с подчиненными ячейками в его диапазоне
worksheet . getCell ( 'A2' ) . value = {
formula : 'A1' ,
result : 10 ,
shareType : 'shared' ,
ref : 'A2:B3'
} ;
Общая формула может быть назначена ячейке с использованием новой формы значения:
worksheet . getCell ( 'B2' ) . value = { sharedFormula : 'A2' , result : 10 } ;
Это указывает, что ячейка B2 является формулой, которая будет получена из формулы в A2, и ее результат составляет 10.
Удобство формулы переведет формулу в A2 на то, что она должна быть в B2:
expect ( worksheet . getCell ( 'B2' ) . formula ) . to . equal ( 'B1' ) ;
Общие формулы могут быть назначены в лист, используя функцию «fillformula»:
// set A1 to starting number
worksheet . getCell ( 'A1' ) . value = 1 ;
// fill A2 to A10 with ascending count starting from A1
worksheet . fillFormula ( 'A2:A10' , 'A1+1' , [ 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
FillFormula также может использовать функцию обратного вызова для расчета значения в каждой ячейке
// fill A2 to A100 with ascending count starting from A1
worksheet . fillFormula ( 'A2:A100' , 'A1+1' , ( row , col ) => row ) ;
Чтобы различить реальные и переведенные ячейки формулы, используйте Getter Formulatype:
worksheet . getCell ( 'A3' ) . formulaType === Enums . FormulaType . Master ;
worksheet . getCell ( 'B3' ) . formulaType === Enums . FormulaType . Shared ;
Тип формулы имеет следующие значения:
Имя | Ценить |
---|---|
Enums.formulatype.none | 0 |
Enums.formulatype.master | 1 |
Enums.formulatype.shared | 2 |
Новым способом выражения общих формул в Excel является формула массива. В этой форме главная ячейка является единственной ячейкой, которая содержит любую информацию, касающуюся формулы. Он содержит Sharetype «массив», а также диапазон ячеек, к которым он применяется, и формулой, которая будет скопирована. Остальные ячейки являются регулярными клетками с регулярными значениями.
ПРИМЕЧАНИЕ. Формулы массива не переводятся в том, как общие формулы. Таким образом, если основная ячейка A2 относится к A1, то подчиненная ячейка B2 также будет ссылаться на A1.
Например
// assign array formula to A2:B3
worksheet . getCell ( 'A2' ) . value = {
formula : 'A1' ,
result : 10 ,
shareType : 'array' ,
ref : 'A2:B3'
} ;
// it may not be necessary to fill the rest of the values in the sheet
Функция FillFormula также может использоваться для заполнения формулы массива
// fill A2:B3 with array formula "A1"
worksheet . fillFormula ( 'A2:B3' , 'A1' , [ 1 , 1 , 1 , 1 ] , 'array' ) ;
Enum: Excel.valueType.richtext
Богатый, стильный текст.
Например
worksheet . getCell ( 'A1' ) . value = {
richText : [
{ text : 'This is ' } ,
{ font : { italic : true } , text : 'italic' } ,
]
} ;
Enum: Excel.valueType.boolean
Например
worksheet . getCell ( 'A1' ) . value = true ;
worksheet . getCell ( 'A2' ) . value = false ;
Enum: Excel.valueType.error
Например
worksheet . getCell ( 'A1' ) . value = { error : '#N/A' } ;
worksheet . getCell ( 'A2' ) . value = { error : '#VALUE!' } ;
Текущие допустимые значения текста ошибки:
Имя | Ценить |
---|---|
Excel.ErrorValue.notApplicable | #Н/Д |
Excel.errorvalue.ref | #Ref! |
Excel.errorvalue.name | #ИМЯ? |
Excel.errorvalue.divzero | #Div/0! |
Excel.errorvalue.null | #НУЛЕВОЙ! |
Excel.errorvalue.value | #ЦЕНИТЬ! |
Excel.errorvalue.num | #Num! |
Прилагаются все усилия, чтобы сделать хороший постоянный интерфейс, который не прорывается через версии, но, к сожалению, время от времени некоторые вещи должны меняться для большего блага.
Аргументы в функции обратного вызова на лист. Это была функция (Rownumber, Rowvalues), теперь это функция (row, rownumber), которая придает ему внешний вид более похожей на функцию подчеркивания (_.each) и приоритеты объекта ряда по номеру строки.
Эта функция изменилась от возврата редкого массива значений ячеек до возврата объекта строки. Это позволяет получить доступ к свойствам строк и будет способствовать управлению стилями строк и так далее.
Разреженное массив значений ячеек по -прежнему доступно через Worksheet.getrow (Rownumber).
Cell.styles переименован в Cell.Style
Обещания возвращаются из функций, переключенных от Bluebird в Node Node Promise, которое может нарушить код вызова, если они полагаются на дополнительные функции Bluebird.
Чтобы смягчить это. Следующие два изменения были добавлены к 0.3.0:
Exceljs теперь поддерживает инъекцию зависимости для библиотеки обещаний. Вы можете восстановить обещания Bluebird, включив следующий код в свой модуль ...
ExcelJS . config . setValue ( 'promise' , require ( 'bluebird' ) ) ;
Обратите внимание: я в частности, я тестировал Exceljs с Bluebird (поскольку до недавнего времени это была библиотека, которую он использовал). Из тестов, которые я сделал, это не будет работать с Q.
Перед публикацией этого модуля исходный код переносится и иным образом обрабатывается до того, как его помещают в папку. Этот README идентифицирует два файла - пакет браузеров и мини -версию. Никакое другое содержимое папки Dist/
Тестовый набор, включенный в эту LIB, включает в себя небольшой сценарий, выполненный в безголовом браузере для проверки комплексных пакетов. На момент написания этой статьи кажется, что этот тест не хорошо воспроизводится в подсистеме Windows Linux.
По этой причине тест браузера может быть отключен путем наличия файла с именем .disable-test-browser
sudo apt-get install libfontconfig
Если какая -либо операция сплайсинга влияет на объединенную ячейку, группа слияния не будет правильно перемещена
Версия | Изменения |
---|---|
0,0,9 |
|
0,1,0 |
|
0,1,1 |
|
0,1,2 |
|
0,1,3 |
|
0,1,5 |
|
0.1.6 |
|
0,1,8 |
|
0,1,9 |
|
0,1,10 |
|
0,1,11 |
|
0.2.0 |
|
0,2,2 |
|
0,2,3 |
|
0,2,4 |
|
0,2,6 |
|
0,2,7 |
|
0.2.8 |
|
0,2,9 |
|
0.2.10 |
|
0.2.11 |
|
0.2.12 |
|
0.2.13 |
|
0.2.14 |
|
0.2.15 |
|
0.2.16 |
|
0.2.17 |
|
0.2.18 |
|
0.2.19 |
|
0.2.20 |
|
0,2,21 |
|
0,2,22 |
|
0,2,23 |
|
0,2,24 |
|
0,2,25 |
|
0,2,26 |
|
0,2,27 |
|
0,2,28 |
|
0,2,29 |
|
0.2.30 |
|
0,2,31 |
|
0,2,32 |
|
0,2,33 |
|
0,2,34 |
|
0,2,35 |
|
0,2,36 |
|
0,2,37 |
|
0,2,38 |
|
0,2,39 |
|
0,2,42 |
|
0,2,43 |
|
0,2,44 |
|
0,2,45 |
|
0,2,46 |
|
0,3,0 |
|
0,3,1 |
|
0.4.0 |
|
0.4.1 |
|
0.4.2 |
|
0.4.3 |
|
0.4.4 |
|
0,4,6 |
|
0.4.9 |
|
0.4.10 |
|
0.4.11 |
|
0.4.12 |
|
0.4.13 |
|
0.4.14 |
|
0.5.0 |
|
0.5.1 |
|
0,6,0 |
|
0.6.1 |
|
0,6,2 |
|
0,7,0 |
|
0.7.1 |
|
0.8.0 |
|
0.8.1 |
|
0.8.2 |
|
0.8.3 |
|
0.8.4 |
|
0.8.5 |
|
0.9.0 |
|
0.9.1 |
|
1.0.0 |
|
1.0.1 |
|
1.0.2 |
|
1.1.0 |
|
1.1.1 |
|
1.1.2 |
|
1.1.3 |
|
1.2.0 |
|
1.2.1 |
|
1.3.0 |
|
1.4.2 |
|
1.4.3 |
|
1.4.5 |
|
1.4.6 |
|
1.4.7 |
|
1.4.8 |
|
1.4.9 |
|
1.4.10 |
|
1.4.12 |
|
1.4.13 |
|
1.5.0 |
|
1.5.1 |
|
1.6.0 |
|
1.6.1 |
|
1.6.2 |
|
1.6.3 |
|
1.7.0 |
|
1.8.0 |
|
1.9.0 |
|
1.9.1 |
|
1.10.0 |
|
1.11.0 |
|
1.12.0 |
|
1.12.1 |
|
1.12.2 |
|
1.13.0 |
|
1.14.0 |
|
1.15.0 |
|
2.0.1 | Major Version ChangeIntroducing async/await to ExcelJS! The new async and await features of JavaScript can help a lot to make code more readable and maintainable. To avoid confusion, particularly with returned promises from async functions, we have had to remove the Promise class configuration option and from v2 onwards ExcelJS will use native Promises. Since this is potentially a breaking change we're bumping the major version for this release. Изменения
|
3.0.0 | Another Major Version ChangeJavascript has changed a lot over the years, and so have the modules and technologies surrounding it. To this end, this major version of ExcelJS changes the structure of the publish artefacts: Main Export is now the Original Javascript SourcePrior to this release, the transpiled ES5 code was exported as the package main. From now on, the package main comes directly from the lib/ folder. This means a number of dependencies have been removed, including the polyfills. ES5 and Browserify are Still IncludedIn order to support those that still require ES5 ready code (eg as dependencies in web apps) the source code will still be transpiled and available in dist/es5. The ES5 code is also browserified and available as dist/exceljs.js or dist/exceljs.min.js See the section Importing for details |
3.1.0 |
|
3.2.0 |
|
3.3.0 |
|
3.3.1 |
|
3.4.0 |
|
3.5.0 |
|
3.6.0 |
|
3.6.1 |
|
3.7.0 |
|
3.8.0 |
|
3.8.1 |
|
3.8.2 |
|
3.9.0 |
|
3.10.0 |
|
4.0.1 |
|
4.1.0 |
|
4.1.1 |
|
4.2.0 |
|
4.2.1 |
|
4.3.0 |
|