XLSX 및 JSON에 스프레드시트 데이터와 스타일을 읽고, 조작하고, 씁니다.
Excel 스프레드시트 파일을 프로젝트로 리버스 엔지니어링합니다.
npm install exceljs
기여를 매우 환영합니다! 어떤 기능이 필요한지, 어떤 버그가 가장 큰 고통을 주는지 파악하는 데 도움이 됩니다.
딱 한 가지 부탁이 있습니다. 버그 수정에 대한 풀 요청을 제출하는 경우 문제를 포착하는 단위 테스트 또는 통합 테스트(spec 폴더에 있음)를 추가하세요. 테스트가 실패한 PR이라도 괜찮습니다. 테스트가 수행하는 작업을 분석하고 거기에서 코드를 수정할 수 있습니다.
참고: PR에서 패키지 버전을 수정하지 마십시오. 버전은 릴리스 시 업데이트되며 변경 사항이 있으면 병합 충돌이 발생할 가능성이 높습니다.
분명히 말하면 이 라이브러리에 추가된 모든 기여는 라이브러리의 MIT 라이센스에 포함됩니다.
const ExcelJS = require ( 'exceljs' ) ;
예를 들어 10보다 오래된 node.js 버전의 경우 ES5 트랜스파일된 코드를 사용하려면 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 ;
지원되는 속성
이름 | 기본 | 설명 |
---|---|---|
탭색상 | 한정되지 않은 | 탭 색상 |
개요레벨콜 | 0 | 워크시트 열 개요 수준 |
개요레벨 행 | 0 | 워크시트 행 개요 수준 |
기본 행높이 | 15 | 기본 행 높이 |
기본 ColWidth | (선택 과목) | 기본 열 너비 |
dyDescent | 55 | 미정 |
워크시트에 몇 가지 새로운 측정항목이 추가되었습니다.
이름 | 설명 |
---|---|
행 개수 | 문서의 전체 행 크기입니다. 값이 있는 마지막 행의 행 번호와 같습니다. |
실제 행 개수 | 값이 있는 행 수입니다. 문서 중간 행이 비어 있으면 개수에 포함되지 않습니다. |
열 개수 | 문서의 총 열 크기입니다. 모든 행의 최대 셀 수와 동일 |
실제 열 개수 | 값이 있는 열 수입니다. |
시트 인쇄에 영향을 미칠 수 있는 모든 속성은 시트의 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' ;
지원되는 pageSetup 설정
이름 | 기본 | 설명 |
---|---|---|
여백 | 페이지 테두리에 공백이 있습니다. 단위는 인치입니다. | |
정위 | '초상화' | 페이지 방향 - 즉, 더 높거나(세로) 더 넓음(가로) |
수평Dpi | 4294967295 | 인치당 수평 도트 수. 기본값은 -1입니다. |
수직Dpi | 4294967295 | 인치당 수직 도트 수. 기본값은 -1입니다. |
페이지에 맞추기 | fitToWidth 및 fitToHeight 또는 배율 설정을 사용할지 여부입니다. 기본값은 pageSetup 객체에 이러한 설정이 있는지에 따라 결정됩니다. 둘 다 존재하면 규모가 우선됩니다(예: 기본값은 false가 됩니다). | |
페이지주문 | 'downThenOver' | 페이지를 인쇄할 순서 - ['downThenOver', 'overThenDown'] 중 하나 |
검정색과 흰색 | 거짓 | 컬러 없이 인쇄 |
초안 | 거짓 | 낮은 품질(및 잉크)로 인쇄 |
셀댓글 | '없음' | 주석을 넣을 위치 - ['atEnd', 'asDisplayed', 'None'] 중 하나 |
오류 | '표시' | 오류 표시 위치 - ['대시', '공백', 'NA', '표시됨'] 중 하나 |
규모 | 100 | 인쇄 크기를 늘리거나 줄이는 백분율 값입니다. fitToPage가 false일 때 활성화됩니다. |
너비에 맞게 | 1 | 시트를 인쇄해야 하는 페이지 너비입니다. fitToPage가 true일 때 활성화됩니다. |
높이에 맞게 | 1 | 시트를 인쇄해야 하는 페이지 높이입니다. fitToPage가 true일 때 활성화됩니다. |
종이크기 | 사용할 용지 크기(아래 참조) | |
showRowColHeaders | 거짓 | 행 번호와 열 문자 표시 여부 |
showGridLines | 거짓 | 그리드선 표시 여부 |
첫 번째 페이지 번호 | 첫 번째 페이지에 사용할 번호 | |
수평중앙 | 거짓 | 시트 데이터를 가로로 가운데에 맞출지 여부 |
수직중앙 | 거짓 | 시트 데이터를 세로로 가운데에 맞출지 여부 |
예제 용지 크기
이름 | 값 |
---|---|
편지 | 한정되지 않은 |
합법적인 | 5 |
경영진 | 7 |
A3 | 8 |
A4 | 9 |
A5 | 11 |
B5(JIS) | 13 |
봉투 #10 | 20 |
봉투 DL | 27 |
봉투 C5 | 28 |
봉투 B5 | 34 |
봉투 군주 | 37 |
이중 일본 엽서 회전 | 82 |
16K 197x273mm | 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"
지원되는 머리글바닥글 설정
이름 | 기본 | 설명 |
---|---|---|
다른첫 번째 | 거짓 | DifferentFirst의 값을 true로 설정합니다. 이는 첫 번째 페이지의 머리글/바닥글이 다른 페이지와 다르다는 것을 나타냅니다. |
다르다홀수 짝수 | 거짓 | 홀수 페이지와 짝수 페이지의 머리글/바닥글이 다르다는 것을 나타내는 DifferentOddEven 값을 true로 설정합니다. |
홀수헤더 | null | 홀수(기본) 페이지에 대한 헤더 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
이상한 바닥글 | null | 홀수(기본) 페이지에 대한 바닥글 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
짝수헤더 | null | 짝수 페이지에 대한 헤더 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
짝수바닥글 | null | 짝수 페이지에 대한 바닥글 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
첫 번째 헤더 | null | 첫 번째 페이지에 대한 헤더 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
첫 번째 바닥글 | null | 첫 번째 페이지의 바닥글 문자열을 설정하고 문자열 형식을 지정할 수 있습니다. |
스크립트 명령
명령 | 설명 |
---|---|
&엘 | 위치를 왼쪽으로 설정 |
&기음 | 위치를 중앙으로 설정 |
&아르 자형 | 위치를 오른쪽으로 설정 |
&피 | 현재 페이지 번호 |
&N | 총 페이지 수 |
&디 | 현재 날짜 |
&티 | 현재 시간 |
&G | 사진 |
&에이 | 워크시트 이름 |
&에프 | 파일 이름 |
&비 | 텍스트를 굵게 표시 |
&나 | 텍스트를 기울임꼴로 표시 |
&유 | 텍스트에 밑줄을 긋습니다 |
&"글꼴 이름" | 글꼴 이름(예: &"Aril") |
글꼴 크기(&F) | 글꼴 크기(예: 12) |
&KHEX코드 | 글꼴 색상(예: &KCCCCCC) |
이제 워크시트는 Excel에서 시트를 표시하는 방법을 제어하는 보기 목록을 지원합니다.
각 보기는 다양한 속성도 지원합니다.
이름 | 기본 | 설명 |
---|---|---|
상태 | '정상' | 보기 상태를 제어합니다(일반, 고정 또는 분할 중 하나). |
오른쪽에서왼쪽으로 | 거짓 | 워크시트 보기 방향을 오른쪽에서 왼쪽으로 설정합니다. |
활성셀 | 한정되지 않은 | 현재 선택된 셀 |
표시 눈금자 | 진실 | 페이지 레이아웃에서 눈금자를 표시하거나 숨깁니다. |
showRowColHeaders | 진실 | 행 및 열 헤더를 표시하거나 숨깁니다(예: 상단의 A1, B1 및 왼쪽의 1,2,3). |
showGridLines | 진실 | 눈금선을 표시하거나 숨깁니다(테두리가 정의되지 않은 셀에 표시됨). |
확대/축소배율 | 100 | 뷰에 사용할 백분율 확대/축소 |
확대/축소표준 | 100 | 보기의 일반 확대/축소 |
스타일 | 한정되지 않은 | 프리젠테이션 스타일 - pageBreakPreview 또는 pageLayout 중 하나입니다. 참고 pageLayout은 고정된 보기와 호환되지 않습니다. |
고정 뷰는 다음과 같은 추가 속성을 지원합니다.
이름 | 기본 | 설명 |
---|---|---|
x분할 | 0 | 고정할 열 수입니다. 행만 고정하려면 이 값을 0 또는 정의되지 않음으로 설정하세요. |
y분할 | 0 | 고정할 행 수입니다. 열만 고정하려면 이 값을 0 또는 정의되지 않음으로 설정하세요. |
상단왼쪽셀 | 특별한 | 오른쪽 하단 창의 왼쪽 상단에 표시될 셀은 무엇입니까? 참고: 고정된 셀은 될 수 없습니다. 기본값은 고정 해제된 첫 번째 셀입니다. |
worksheet . views = [
{ state : 'frozen' , xSplit : 2 , ySplit : 3 , topLeftCell : 'G10' , activeCell : 'A1' }
] ;
분할 보기는 다음과 같은 추가 속성을 지원합니다.
이름 | 기본 | 설명 |
---|---|---|
x분할 | 0 | 스플리터를 배치할 포인트는 왼쪽에서 몇 점입니까? 수직으로 분할하려면 0 또는 정의되지 않음으로 설정하세요. |
y분할 | 0 | 스플리터를 배치하기 위해 위에서부터 몇 개의 포인트를 배치해야 하는지입니다. 수평으로 분할하려면 0 또는 정의되지 않음으로 설정하세요. |
상단왼쪽셀 | 한정되지 않은 | 오른쪽 하단 창의 왼쪽 상단에 표시될 셀은 무엇입니까? |
활성 패널 | 한정되지 않은 | 활성화될 창 - 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' | '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' | '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에서는 쉽게 입력할 수 있도록 드롭다운에 이러한 항목을 제공합니다. |
전체 | 값은 정수여야 합니다. |
소수 | 값은 10진수여야 합니다. |
텍스트길이 | 값은 텍스트일 수 있지만 길이는 제어됩니다. |
관습 | 사용자 정의 수식은 유효한 값을 제어합니다. |
목록 또는 사용자 정의 이외의 유형의 경우 다음 연산자가 유효성 검사에 영향을 미칩니다.
연산자 | 설명 |
---|---|
~ 사이 | 값은 수식 결과 사이에 있어야 합니다. |
사이가 아니야 | 값은 수식 결과 사이에 있어서는 안 됩니다. |
동일한 | 값은 수식 결과와 같아야 합니다. |
같지 않음 | 값은 수식 결과와 같지 않아야 합니다. |
보다 큼 | 값은 수식 결과보다 커야 합니다. |
보다 적다 | 값은 수식 결과보다 작아야 합니다. |
보다 크거나 같음 | 값은 수식 결과보다 크거나 같아야 합니다. |
작거나 같음 | 값은 수식 결과보다 작거나 같아야 합니다. |
// 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' ,
} ;
다음 표에서는 셀 주석이 지원하는 속성을 정의합니다.
필드 | 필수의 | 기본값 | 설명 |
---|---|---|---|
텍스트 | 와이 | 댓글의 텍스트 | |
여백 | N | {} | 자동 또는 사용자 정의 셀 주석의 여백 값을 결정합니다. |
보호 | N | {} | 보호 속성을 사용하여 객체 및 객체 텍스트의 잠금 상태 지정 |
다음으로 편집 | N | '순수한' | 주석이 셀에 고정되는 방식을 지정하려면 'editAs' 속성을 사용하세요. |
셀 주석의 페이지 여백 설정 모드, 자동 또는 사용자 정의 모드를 결정합니다.
ws . getCell ( 'B1' ) . note . margins = {
insetmode : 'custom' ,
inset : [ 0.25 , 0.25 , 0.35 , 0.35 ]
}
재산 | 필수의 | 기본값 | 설명 |
---|---|---|---|
삽입 모드 | N | '자동' | 주석 여백을 자동으로 설정할지 여부와 값이 'auto' 또는 'custom'인지 결정합니다. |
삽입 | N | [0.13, 0.13, 0.25, 0.25] | 주석 테두리에 공백이 있습니다. 단위는 센티미터입니다. 방향은 왼쪽, 위, 오른쪽, 아래 |
참고: 이 inset
설정은 insetmode
값이 'custom'인 경우에만 적용됩니다.
보호 속성을 사용하여 개체 및 개체 텍스트의 잠금 상태를 지정합니다.
ws . getCell ( 'B1' ) . note . protection = {
locked : 'False' ,
lockText : 'False' ,
} ;
재산 | 필수의 | 기본값 | 설명 |
---|---|---|---|
잠긴 | N | '진실' | 이 요소는 시트가 보호될 때 개체가 잠겨 있음을 지정합니다. |
잠금텍스트 | N | '진실' | 이 요소는 개체의 텍스트가 잠겨 있음을 지정합니다. |
참고: 잠긴 개체는 워크시트가 보호되는 경우에만 유효합니다.
셀 주석에는 주석이 셀에 고정되는 방식을 제어하는 'editAs' 속성이 있을 수도 있습니다. 다음 값 중 하나를 가질 수 있습니다.
ws . getCell ( 'B1' ) . note . editAs = 'twoCells' ;
값 | 설명 |
---|---|
투셀 | 노트의 크기와 위치가 셀에 따라 달라지도록 지정합니다. |
원셀 | 노트의 크기는 고정되고 셀에 따라 위치가 변경되도록 지정합니다. |
순수한 | 이것이 기본값입니다. 댓글은 셀에 따라 이동되거나 크기가 조정되지 않습니다. |
테이블을 사용하면 테이블 형식 데이터를 시트 내에서 조작할 수 있습니다.
워크시트에 테이블을 추가하려면 테이블 모델을 정의하고 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 ] ,
] ,
} ) ;
참고: 워크시트에 표를 추가하면 시트에 머리글과 행 데이터가 배치되어 시트가 수정됩니다. 결과 테이블에 포함된 시트의 모든 데이터(머리글 및 합계 포함)는 덮어쓰여집니다.
다음 표에서는 테이블에서 지원하는 속성을 정의합니다.
테이블 속성 | 설명 | 필수의 | 기본값 |
---|---|---|---|
이름 | 테이블 이름 | 와이 | |
표시 이름 | 테이블의 표시 이름 | N | 이름 |
심판 | 테이블의 왼쪽 상단 셀 | 와이 | |
헤더 행 | 표 상단에 헤더 표시 | N | 진실 |
합계 행 | 표 하단에 총계 표시 | N | 거짓 |
스타일 | 추가 스타일 속성 | N | {} |
기둥 | 열 정의 | 와이 | |
행 | 데이터 행 | 와이 |
다음 표에서는 테이블 스타일 속성 내에서 지원되는 속성을 정의합니다.
스타일 속성 | 설명 | 필수의 | 기본값 |
---|---|---|---|
주제 | 테이블의 색상 테마 | N | '테이블스타일미디엄2' |
showFirstColumn | 첫 번째 열을 강조 표시합니다(굵게). | N | 거짓 |
마지막 열 표시 | 마지막 열 강조 표시(굵게) | N | 거짓 |
showRow줄무늬 | 배경색으로 표시되는 대체 행 | N | 거짓 |
showColumnStripes | 배경색으로 표시되는 대체 행 | N | 거짓 |
다음 표에서는 각 테이블 열 내에서 지원되는 속성을 정의합니다.
열 속성 | 설명 | 필수의 | 기본값 |
---|---|---|---|
이름 | 헤더에도 사용되는 열 이름 | 와이 | |
필터버튼 | 헤더의 필터 컨트롤을 전환합니다. | N | 거짓 |
totalsRowLabel | 총계 행(첫 번째 열)을 설명하는 라벨 | N | '총' |
totalsRow함수 | 합계 함수의 이름 | N | '없음' |
totalsRowFormula | 사용자 정의 함수에 대한 선택적 수식 | N |
다음 표에는 열로 정의된 totalsRowFunction 속성의 유효한 값이 나열되어 있습니다. 'custom' 이외의 값을 사용하는 경우 관련 수식은 표에 의해 삽입되므로 포함할 필요가 없습니다.
합계 기능 | 설명 |
---|---|
없음 | 이 열에는 합계 기능이 없습니다. |
평균 | 열의 평균 계산 |
개수 | 숫자로 된 항목 수 계산 |
세다 | 항목 수 |
최대 | 이 열의 최대값 |
분 | 이 열의 최소값 |
표준편차 | 이 열의 표준 편차 |
var | 이 열의 분산 |
합집합 | 이 열의 항목 합계 |
관습 | 사용자 정의 수식. 연관된 totalsRowFormula 값이 필요합니다. |
유효한 테마 이름은 다음 패턴을 따릅니다.
음영, 숫자는 다음 중 하나일 수 있습니다.
테마가 없으면 null 값을 사용합니다.
참고: 사용자 정의 테이블 테마는 아직 exceljs에서 지원되지 않습니다.
테이블은 데이터를 추가하거나 제거하고 일부 속성을 변경할 수 있는 일련의 조작 기능을 지원합니다. 이러한 작업 중 다수는 시트에 영향을 미칠 수 있으므로 변경 사항은 완료되면 커밋되어야 합니다.
테이블의 모든 인덱스 값은 0부터 시작하므로 첫 번째 행 번호와 첫 번째 열 번호는 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 } ;
행이나 열에 스타일을 적용하면 해당 행이나 열에 현재 존재하는 모든 셀에 스타일이 적용됩니다. 또한 생성된 새 셀은 해당 셀이 속한 행과 열의 초기 스타일을 상속받습니다.
셀의 행과 열이 모두 특정 스타일(예: 글꼴)을 정의하는 경우 셀은 열 스타일 대신 행 스타일을 사용합니다. 그러나 행과 열이 서로 다른 스타일(예: column.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, '없음', 'single', 'double', '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' } ;
유효한 정렬 속성 값
수평의 | 수직의 | 줄바꿈텍스트 | ShrinkToFit | 톱니 모양 | 읽기주문 | 텍스트 회전 |
---|---|---|---|---|---|---|
왼쪽 | 맨 위 | 진실 | 진실 | 정수 | rtl | 0~90 |
센터 | 가운데 | 거짓 | 거짓 | ltr | -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' } }
]
} ;
재산 | 필수의 | 설명 |
---|---|---|
유형 | 와이 | 값: '패턴' 이 채우기가 패턴을 사용하도록 지정합니다. |
무늬 | 와이 | 패턴 유형을 지정합니다(아래의 유효한 패턴 유형 참조). |
fg색상 | N | 패턴 전경색을 지정합니다. 기본값은 검은색입니다. |
bg색상 | N | 패턴 배경색을 지정합니다. 기본값은 흰색입니다. |
참고: solid
패턴을 사용하여 셀을 채우려면 bgColor
지정할 필요가 없습니다. solid
패턴과 산호 fgColor
가 있는 셀 A3
에 대한 위의 예를 참조하세요.
유효한 패턴 유형
재산 | 필수의 | 설명 |
---|---|---|
유형 | 와이 | 값: '그라디언트' 이 채우기가 그라데이션을 사용하도록 지정합니다. |
구배 | 와이 | 그라데이션 유형을 지정합니다. ['각도', '경로'] 중 하나 |
도 | 각도 | 'angle' 그라데이션의 경우 그라데이션 방향을 지정합니다. 0은 왼쪽에서 오른쪽입니다. 1 - 359 사이의 값은 시계 방향으로 회전합니다. |
센터 | 길 | '경로' 그라데이션의 경우. 경로 시작의 상대 좌표를 지정합니다. 'left' 및 'top' 값의 범위는 0~1입니다. |
정류장 | 와이 | 그라데이션 색상 순서를 지정합니다. 위치 0에서 시작하여 위치 1로 끝나는 위치와 색상을 포함하는 객체의 배열입니다. 중간 위치는 경로의 다른 색상을 지정하는 데 사용될 수 있습니다. |
주의사항
위의 인터페이스를 사용하면 XLSX 편집기 프로그램에서는 불가능한 그라데이션 채우기 효과를 만드는 것이 가능할 수도 있습니다. 예를 들어 Excel에서는 0, 45, 90 및 135의 각도 그라데이션만 지원합니다. 마찬가지로 정지 순서는 [0,1] 또는 [0,0.5,1] 위치를 유일한 옵션으로 사용하여 UI에 의해 제한될 수도 있습니다. 대상 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 ) ;
보호 속성을 사용하여 셀 수준 보호를 수정할 수 있습니다.
ws . getCell ( 'A1' ) . protection = {
locked : false ,
hidden : true ,
} ;
지원되는 보호 속성
재산 | 기본 | 설명 |
---|---|---|
잠긴 | 진실 | 시트가 보호되어 있는 경우 셀을 잠글지 여부를 지정합니다. |
숨겨진 | 거짓 | 시트가 보호된 경우 셀의 수식을 표시할지 여부를 지정합니다. |
조건부 서식을 사용하면 셀 값이나 임의의 수식에 따라 시트에 특정 스타일, 아이콘 등을 표시할 수 있습니다.
조건부 서식 규칙은 시트 수준에서 추가되며 일반적으로 셀 범위에 적용됩니다.
특정 셀 범위에 여러 규칙을 적용할 수 있으며 각 규칙은 고유한 스타일을 적용합니다.
여러 규칙이 특정 셀에 영향을 미치는 경우 경쟁 스타일이 충돌할 경우 규칙 우선순위 값에 따라 어떤 규칙이 승리할지 결정됩니다. 우선순위 값이 낮은 규칙이 우선합니다. 특정 규칙에 우선순위 값이 지정되지 않은 경우 ExcelJS는 해당 값을 오름차순으로 할당합니다.
참고: 현재 조건부 서식 규칙의 하위 집합만 지원됩니다. 특히 <extLst> 요소 내에서 XML 렌더링이 필요하지 않은 형식 지정 규칙만 해당됩니다. 이는 데이터 세트와 세 가지 특정 아이콘 세트(3Triangles, 3Stars, 5Boxes)가 지원되지 않음을 의미합니다.
// 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 | 상위(또는 하위) 범위의 값이 있는 셀에 서식을 적용합니다. |
평균 이상 | 평균보다 높거나 낮은 값을 가진 셀에 서식을 적용합니다. |
색상 규모 | 범위 내 값의 위치에 따라 셀에 색상이 있는 배경을 적용합니다. |
아이콘 세트 | 값에 따라 셀에 아이콘 범위 중 하나를 추가합니다. |
포함텍스트 | 셀에 특정 텍스트가 있는지 여부에 따라 서식을 적용합니다. |
시간기간 | 셀 날짜/시간 값이 지정된 범위 내에 있는지 여부에 따라 서식을 적용합니다. |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '표현' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
방식 | 참/거짓 값을 반환하는 1개의 수식 문자열 배열입니다. 셀 값을 참조하려면 왼쪽 상단 셀 주소를 사용하세요. | ||
스타일 | 수식이 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '셀' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
연산자 | 셀 값을 수식 결과와 비교하는 방법 | ||
방식 | 각 셀과 비교할 값을 반환하는 1개의 수식 문자열 배열 | ||
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
셀은 연산자임
연산자 | 설명 |
---|---|
동일한 | 셀 값이 수식 값과 같은 경우 서식 적용 |
보다 큼 | 셀 값이 수식 값보다 큰 경우 서식 적용 |
보다 적다 | 셀 값이 수식 값보다 작은 경우 서식 적용 |
~ 사이 | 셀 값이 두 수식 값(포함) 사이에 있는 경우 서식 적용 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '톱10' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
계급 | 와이 | 10 | 서식에 포함되는 상위(또는 하위) 값 수를 지정합니다. |
퍼센트 | 와이 | 거짓 | true인 경우 순위 필드는 절대값이 아닌 백분율입니다. |
맨 아래 | 와이 | 거짓 | true인 경우 상위 값 대신 하위 값이 포함됩니다. |
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '평균 이상' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
평균 이상 | 와이 | 거짓 | true인 경우 순위 필드는 절대값이 아닌 백분율입니다. |
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '색상 스케일' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
cfvo | 값 범위에서 웨이포인트를 지정하는 2~5개의 조건부 서식 값 개체 배열 | ||
색상 | 주어진 경유지에서 사용할 해당 색상 배열 | ||
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '아이콘 세트' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
아이콘 세트 | 와이 | 3신호등 | 사용하도록 설정된 아이콘 이름 |
표시값 | 진실 | 적용된 범위의 셀에 아이콘과 셀 값이 표시되는지, 아니면 아이콘만 표시되는지 지정합니다. | |
뒤집다 | 거짓 | iconSet에 지정된 아이콘 세트의 아이콘을 예약 순서로 표시할지 여부를 지정합니다. custom이 "true"인 경우 이 값을 무시해야 합니다. | |
관습 | 거짓 | 사용자 정의 아이콘 세트가 사용되는지 여부를 지정합니다. | |
cfvo | 값 범위에서 웨이포인트를 지정하는 2~5개의 조건부 서식 값 개체 배열 | ||
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '데이터바' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
최소 길이 | 0 | 이 조건부 서식 범위에서 가장 짧은 데이터 막대의 길이를 지정합니다. | |
최대 길이 | 100 | 이 조건부 서식 범위에서 가장 긴 데이터 막대의 길이를 지정합니다. | |
표시값 | 진실 | 조건부 서식 범위의 셀에 데이터 막대와 숫자 값을 모두 표시할지 아니면 데이터 막대를 표시할지 지정합니다. | |
구배 | 진실 | 데이터 막대에 그라데이션 채우기가 있는지 여부를 지정합니다. | |
국경 | 진실 | 데이터 막대에 테두리가 있는지 여부를 지정합니다. | |
negativeBarColorSameAsPositive | 진실 | 데이터 막대에 양수 막대 색상과 다른 음수 막대 색상이 있는지 여부를 지정합니다. | |
negativeBarBorderColorSameAsPositive | 진실 | 데이터 막대에 양수 테두리 색과 다른 음수 테두리 색이 있는지 여부를 지정합니다. | |
축 위치 | '자동' | 데이터 막대의 축 위치를 지정합니다. | |
방향 | '왼쪽에서 오른쪽으로' | 데이터 막대의 방향을 지정합니다. | |
cfvo | 값 범위에서 웨이포인트를 지정하는 2~5개의 조건부 서식 값 개체 배열 | ||
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '텍스트 포함' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
연산자 | 텍스트 비교 유형 | ||
텍스트 | 검색할 텍스트 | ||
스타일 | 비교 결과가 true를 반환하는 경우 적용할 스타일 구조 |
텍스트 연산자 포함
연산자 | 설명 |
---|---|
포함텍스트 | 셀 값에 '텍스트' 필드에 지정된 값이 포함된 경우 서식 적용 |
공백 포함 | 셀 값에 공백이 포함된 경우 서식 적용 |
notContains공백 | 셀 값에 공백이 포함되지 않은 경우 서식 적용 |
포함오류 | 셀 값에 오류가 있는 경우 서식 적용 |
notContainsErrors | 셀 값에 오류가 없으면 서식 적용 |
필드 | 선택 과목 | 기본 | 설명 |
---|---|---|---|
유형 | '시간 기간' | ||
우선 사항 | 와이 | <자동> | 스타일의 우선순위를 결정합니다. |
시간기간 | 셀 값을 비교할 기간 | ||
스타일 | 비교 결과가 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 ,
} ;
워크시트에 이미지를 추가하는 과정은 2단계로 이루어집니다. 먼저, imageId 값도 반환하는 addImage() 함수를 통해 이미지가 통합 문서에 추가됩니다. 그런 다음 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의 이미지 ID를 사용하면 addBackgroundImage 함수를 사용하여 워크시트의 배경을 설정할 수 있습니다.
// set background
worksheet . addBackgroundImage ( imageId1 ) ;
Workbook.addImage의 이미지 ID를 사용하면 워크시트 내에 이미지를 삽입하여 범위를 포괄할 수 있습니다. 범위에서 계산된 좌표는 첫 번째 셀의 왼쪽 상단부터 두 번째 셀의 오른쪽 하단까지 포함됩니다.
// insert an image over B2:D6
worksheet . addImage ( imageId2 , 'B2:D6' ) ;
범위 문자열 대신 구조를 사용하면 셀을 부분적으로 덮는 것이 가능합니다.
이에 사용되는 좌표계는 0부터 시작하므로 A1의 왼쪽 상단은 { col: 0, row: 0 }이 됩니다. 셀의 일부는 부동 소수점 숫자를 사용하여 지정할 수 있습니다. 예를 들어 A1의 중간점은 { col: 0.5, row: 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 }
} ) ;
셀 범위에는 이미지가 셀에 고정되는 방식을 제어하는 'editAs' 속성이 있을 수도 있습니다. 다음 값 중 하나를 가질 수 있습니다.
값 | 설명 |
---|---|
한정되지 않은 | 이미지가 셀로 이동되고 크기가 조정되도록 지정합니다. |
원셀 | 이것이 기본값입니다. 이미지는 셀과 함께 이동되지만 크기는 조정되지 않습니다. |
순수한 | 이미지는 셀에 따라 이동되거나 크기가 조정되지 않습니다. |
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 ( ) ;
개별 셀 보호를 수정하는 방법에 대한 자세한 내용은 셀 보호를 참조하세요.
참고: protected() 함수는 비동기임을 나타내는 Promise를 반환하지만 현재 구현은 메인 스레드에서 실행되며 평균 CPU에서 약 600ms를 사용합니다. 이는 프로세스를 더 빠르게 또는 더 탄력적으로 만드는 데 사용할 수 있는 spinCount를 설정하여 조정할 수 있습니다.
필드 | 기본 | 설명 |
---|---|---|
selectLockedCells | 진실 | 사용자가 잠긴 셀을 선택할 수 있습니다. |
selectUnlockedCells | 진실 | 사용자가 잠금 해제된 셀을 선택할 수 있습니다. |
형식셀 | 거짓 | 사용자가 셀 서식을 지정할 수 있습니다. |
형식열 | 거짓 | 사용자가 열 형식을 지정할 수 있습니다. |
형식행 | 거짓 | 사용자가 행 형식을 지정할 수 있습니다. |
insertRows | 거짓 | 사용자가 행을 삽입할 수 있습니다. |
삽입 컬럼 | 거짓 | 사용자가 열을 삽입 할 수 있습니다 |
InserthyPerlinks | 거짓 | 사용자가 하이퍼 링크를 삽입 할 수 있습니다 |
DELETEROWS | 거짓 | 사용자가 행을 삭제할 수 있습니다 |
deletecolumns | 거짓 | 사용자가 열을 삭제할 수 있습니다 |
종류 | 거짓 | 사용자가 데이터를 정렬 할 수 있습니다 |
자동 조정기 | 거짓 | 사용자가 테이블에서 데이터를 필터링 할 수 있습니다 |
피벗 테이블 | 거짓 | 사용자가 피벗 테이블을 사용할 수 있습니다 |
Spincount | 100000 | 보호 또는 보호를받을 때 수행되는 해시 반복의 수 |
XLSX 파일을 읽을 때 지원되는 옵션.
필드 | 필수의 | 유형 | 설명 |
---|---|---|---|
무시합니다 | N | 정렬 | XLSX 문서를로드하는 동안 무시할 노드 이름 목록. 어떤 상황에서는 성능을 향상시킵니다. 이용 가능 : 이용 가능 : 이용 가능 : sheetPr , dimension , sheetViews , sheetFormatPr , cols , sheetData , autoFilter , mergeCells , rowBreaks , hyperlinks , pageMargins , dataValidations , pageSetup , headerFooter , printOptions , picture , drawing , sheetProtection , tableParts , CONTERIONALFORTTING, conditionalFormatting , Extlst, extLst , |
// 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 파일을 읽을 때 지원되는 옵션.
필드 | 필수의 | 유형 | 설명 |
---|---|---|---|
DateFormats | N | 정렬 | dayjs의 날짜 인코딩 형식을 지정하십시오. |
지도 | N | 기능 | Custom Array.prototype.map () 데이터 처리를위한 콜백 함수. |
Sheetname | N | 끈 | 워크 시트 이름을 지정합니다. |
구문 분석 | N | 물체 | 구문 분석 옵션 @Fast-CSV/Format Module은 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 파일을 읽습니다. 위의 쓰기 함수로 전달 된 옵션의 형식화는 @Fast-CSV/Format 모듈로 전달되어 CSV 데이터를 작성합니다. 자세한 내용은 Fast-CSV Readme.md를 참조하십시오.
날짜는 NPM 모듈 DAYJS를 사용하여 구문 분석됩니다. DateFormats 배열이 제공되지 않으면 다음 날짜 별 매트가 사용됩니다.
DateFormat을 구성하는 방법에 대한 자세한 내용은 DayJS CustomParseFormat 플러그인을 참조하십시오.
CSV 파일에 쓸 때 지원되는 옵션.
필드 | 필수의 | 유형 | 설명 |
---|---|---|---|
날짜형식 | N | 끈 | dayjs의 날짜 인코딩 형식을 지정하십시오. |
DateUtc | N | 부울 | Exceljs가 dayjs.utc () 사용하여 구문 분석 날짜의 시간대를 변환하는지 여부를 지정하십시오. |
부호화 | N | 끈 | 파일 인코딩 형식을 지정하십시오. ( .writeFile 에만 적용됩니다.) |
includyrows | N | 부울 | 빈 행을 쓸 수 있는지 여부를 지정합니다. |
지도 | N | 기능 | custom array.prototype.map () 행 값을 처리하기위한 콜백 함수. |
Sheetname | N | 끈 | 워크 시트 이름을 지정합니다. |
시트 | N | 숫자 | 워크 시트 ID를 지정합니다. |
형식 반포 | N | 물체 | CSV 데이터를 작성하려면 FormatterOptions 옵션 @Fast-CSV/Format Module. |
// 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 파일을 작성합니다. 위의 쓰기 함수로 전달 된 옵션의 형식화는 @Fast-CSV/Format 모듈로 전달되어 CSV 데이터를 작성합니다. 자세한 내용은 Fast-CSV Readme.md를 참조하십시오.
날짜는 NPM 모듈 DAYJS를 사용하여 형식화됩니다. DateFormat가 제공되지 않으면 Dayjs.iso_8601이 사용됩니다. CSV를 작성할 때는 부울 날짜를 dayjs.utc()
사용하여 타임 존을 자동으로 변환하지 않고 날짜를 구문 분석 할 수 있도록 Boolean DateUtc를 진정으로 제공 할 수 있습니다.
위에 문서화 된 파일은 파일을 작성하기 전에 전체 통합 문서가 메모리에 구축되어야합니다. 편리하지만 필요한 메모리의 양으로 인해 문서 크기를 제한 할 수 있습니다.
스트리밍 라이터 (또는 독자)는 생성 될 때 통합 문서 또는 워크 시트 데이터를 처리하여 파일 양식으로 변환합니다. 일반적으로 이것은 최종 메모리 발자국과 심지어 중간 메모리 발자국이 문서 버전보다 훨씬 작기 때문에 메모리에서 훨씬 더 효율적입니다. 특히 행과 셀 객체가 커밋되면 배치된다고 생각할 때.
스트리밍 통합 문서와 워크 시트의 인터페이스는 몇 가지 사소한 차이점을 가진 문서 버전과 거의 동일합니다.
행을 저 지르지 않고 전체 통합 문서를 구축 할 수 있습니다. 통합 문서가 커밋되면 추가 된 모든 워크 시트 (모든 커밋되지 않은 행 포함)가 자동으로 커밋됩니다. 그러나이 경우 문서 버전을 통해 거의 얻을 수 없었습니다.
스트리밍 XLSX 통합 문서 작성자는 엑셀즈 (Exceljs.stream.xlsx namespace)에서 사용할 수 있습니다.
생성자는 다음 필드가있는 선택적 옵션 객체를 취합니다.
필드 | 설명 |
---|---|
개울 | XLSX 통합 문서를 작성하기 위해 쓰기 가능한 스트림을 지정합니다. |
파일 이름 | 스트림이 지정되지 않은 경우이 필드는 XLSX 통합 문서를 작성하는 파일로가는 경로를 지정합니다. |
usesharedstrings | 통합 문서에서 공유 문자열을 사용할지 여부를 지정합니다. 기본값은 false 입니다. |
usestyles | 통합 문서에 스타일 정보를 추가할지 여부를 지정합니다. 스타일은 성능 오버 헤드를 추가 할 수 있습니다. 기본값은 false 입니다. |
지퍼 | 내부적으로 Archiver로 전달되는 지퍼 옵션. 기본값은 undefined . |
스트림이나 파일 이름이 옵션에 지정되지 않으면 통합 문서 작성자는 XLSX 통합 문서의 내용을 메모리에 저장하는 StreamBuf 객체를 만듭니다. 속성 통합 문서를 통해 액세스 할 수있는이 StreamBuf 객체는 stream.Read ()에 의해 바이트에 바이트에 액세스하거나 내용을 다른 스트림에 파이프하는 데 사용될 수 있습니다.
// 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 Writer의 인터페이스는 위에서 설명한 문서 통합 문서 (및 워크 시트)와 동일합니다. 실제로 행, 셀 및 스타일 객체는 동일합니다.
그러나 몇 가지 차이점이 있습니다 ...
건설
위에서 볼 수 있듯이, 통합 작가는 일반적으로 생성자에 지정되도록 출력 스트림 또는 파일을 요구합니다.
데이터 커밋
워크 시트 행이 준비되면 행 객체와 내용을 풀 수 있도록 커밋해야합니다. 일반적으로 이것은 각 행이 추가 될 때 수행됩니다 ...
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 통합 문서를 읽을 수있는 읽기 쉬운 스트림을 지정합니다. |
옵션 (선택 사항) | 읽기 구문 분석 중에 발생하는 이벤트 유형을 처리하는 방법을 지정합니다. |
옵션 | 항목을 방출할지 ( 'emit' ) 여부를 지정합니다 ( 'ignore' ). 기본값은 'emit' 입니다. |
옵션 | 캐시 공유 문자열 ( 'cache' ), 각 셀 값에 삽입하는 또는이를 방출 할 것인지 ( 'emit' ) 또는 무시할 것인지 ( 'ignore' ) 둘 다 셀 값이 될지 여부를 지정합니다. 공유 문자열의 인덱스에 대한 참조. 기본값은 'cache' 입니다. |
옵션. 하이퍼 링크 | 하이퍼 링크 ( 'cache' )를 캐시하는지 여부를 지정하여 해당 셀에 삽입되는 ( 'Cache'), 방출 여부 ( 'emit' ) 또는 무시할지 ( 'ignore' )를 지정합니다. 기본값은 'cache' 입니다. |
옵션 .Styles | 캐시 스타일 ( 'cache' ), 해당 행과 셀에 삽입하는지 또는 무시할지 ( 'ignore' )를 지정합니다. 기본값은 'cache' 입니다. |
옵션 .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를 사용하는 코드 예는 github 저장소의 spec/browser 폴더를 살펴보세요.
다음 파일은 사전 구매되어 있으며 Dist 폴더 내부에 포함되어 있습니다.
다음 값 유형이 지원됩니다.
ENUM : Excel.valuetype.null
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 공식. 셀 유형은 공식이되지만 셀은 결과 값에서 파생 될 이성 유형 값을 가질 수 있습니다.
ExcelJ는 결과를 생성하기 위해 공식을 처리 할 수 없으며 공급해야합니다.
함수 시맨틱 이름은 영어로되어야하며 분리기는 쉼표 여야합니다.
예:
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 ;
공유 공식은 워크 시트 XML 내에서 텍스트 반복을 줄임으로써 XLSX 문서의 압축을 향상시킵니다. 범위의 왼쪽 셀은 지정된 마스터이며 범위의 다른 모든 셀이 파생 될 수있는 공식을 보유합니다. 그런 다음 다른 '슬레이브'셀은 전체 공식을 다시 정의하는 대신이 마스터 셀을 참조 할 수 있습니다. 마스터 공식은 일반적인 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임을 지정합니다.
공식 편의 Getter는 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를 사용하십시오.
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 | #null! |
Excel.errorvalue.Value | #값! |
Excel.errorvalue.num | #num! |
버전을 뚫지 않고 유감스럽게도 지금은 더 큰 이익을 위해 변화 해야하는 좋은 일관된 인터페이스를 만들기 위해 모든 노력이 이루어집니다.
콜백 기능의 워크 시트에 대한 인수는 교환 및 변경되었습니다. 함수 (Rownumber, rowValues), 이제 기능 (행, rownumber)이므로 밑줄 (_.Each) 함수와 우선 순위가 행 번호를 통해 행 객체와 같은 외관과 느낌을줍니다.
이 함수는 희소 한 셀 값 배열의 반환에서 행 객체를 반환하는 것까지 변경되었습니다. 이를 통해 행 속성에 액세스 할 수 있으며 행 스타일 관리를 용이하게합니다.
셀 값의 희소 배열은 워크 시트 .getrow (rownumber) .Values를 통해 여전히 사용할 수 있습니다.
Cell.styles는 Cell.style으로 이름이 바뀌 었습니다
Bluebird에서 Native Node Promise로 전환 된 기능에서 반환 된 약속은 Bluebird의 추가 기능에 의존 할 경우 통화 코드를 깨뜨릴 수 있습니다.
이를 완화하기 위해 다음 두 가지 변경 사항이 0.3.0에 추가되었습니다.
Exceljs는 이제 Promise Library의 종속성 주입을 지원합니다. 모듈에 다음 코드를 포함하여 블루 버드 약속을 복원 할 수 있습니다 ...
ExcelJS . config . setValue ( 'promise' , require ( 'bluebird' ) ) ;
참고 : 나는 Bluebird로 Exceljs를 특별히 테스트했습니다 (최근까지 이것은 사용 된 라이브러리였습니다). 내가 한 테스트에서 Q에서는 작동하지 않습니다.
이 모듈을 게시하기 전에 소스 코드는 DIST/ 폴더에 배치되기 전에 변환 및 그렇지 않으면 처리됩니다. 이 readme은 브라우저 화 된 번들과 미니딩 버전의 두 파일을 식별합니다. Dist/ Folder의 다른 내용은 package.json에 "main"으로 지정된 파일 이외의 다른 방법으로 보장되지 않습니다.
이 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 |
|