Membaca, memanipulasi, dan menulis data dan gaya spreadsheet ke XLSX dan JSON.
Direkayasa balik dari file spreadsheet Excel sebagai sebuah proyek.
npm install exceljs
Kontribusi sangat diharapkan! Ini membantu saya mengetahui fitur apa yang diinginkan atau bug apa yang paling menyebabkan kesulitan.
Saya hanya punya satu permintaan; Jika Anda mengirimkan permintaan penarikan untuk perbaikan bug, harap tambahkan pengujian unit atau pengujian integrasi (dalam folder spesifikasi) yang mengatasi masalah tersebut. Bahkan PR yang tesnya gagal pun baik-baik saja - saya dapat menganalisis apa yang dilakukan tes tersebut dan memperbaiki kode darinya.
Catatan: Harap hindari memodifikasi versi paket di PR. Versi diperbarui pada saat rilis dan perubahan apa pun kemungkinan besar akan mengakibatkan tabrakan penggabungan.
Untuk lebih jelasnya, semua kontribusi yang ditambahkan ke perpustakaan ini akan disertakan dalam lisensi MIT perpustakaan.
const ExcelJS = require ( 'exceljs' ) ;
Untuk menggunakan kode transpilasi ES5, misalnya untuk versi node.js yang lebih lama dari 10, gunakan jalur dist/es5.
const ExcelJS = require ( 'exceljs/dist/es5' ) ;
Catatan: Build ES5 memiliki ketergantungan implisit pada sejumlah polyfill yang tidak lagi ditambahkan secara eksplisit oleh exceljs. Anda perlu menambahkan "core-js" dan "regenerator-runtime" ke dependensi Anda dan menyertakan persyaratan berikut dalam kode Anda sebelum impor 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' ) ;
Untuk IE 11, Anda juga memerlukan polyfill untuk mendukung pola regex unicode. Misalnya,
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 menerbitkan dua bundel browser di dalam folder dist/:
Satu dengan ketergantungan implisit pada polyfill core-js...
< script src =" https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js " > </ script >
< script src =" exceljs.js " > </ script >
Dan satu tanpa...
< 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 ;
Tampilan Buku Kerja mengontrol berapa banyak jendela terpisah yang akan dibuka Excel saat menampilkan buku kerja.
workbook . views = [
{
x : 0 , y : 0 , width : 10000 , height : 20000 ,
firstSheet : 0 , activeTab : 1 , visibility : 'visible'
}
]
const sheet = workbook . addWorksheet ( 'My Sheet' ) ;
Gunakan parameter kedua dari fungsi addWorksheet untuk menentukan opsi lembar kerja.
Misalnya:
// 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' }
} ) ;
Gunakan id
lembar kerja untuk menghapus lembar dari buku kerja.
Misalnya:
// 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;
Penting untuk mengetahui bahwa workbook.getWorksheet(1) != Workbook.worksheets[0]
dan workbook.getWorksheet(1) != Workbook.worksheets[1]
, karena workbook.worksheets[0].id
mungkin memiliki nilai apa pun.
// make worksheet visible
worksheet . state = 'visible' ;
// make worksheet hidden
worksheet . state = 'hidden' ;
// make worksheet hidden from 'hide/unhide' dialog
worksheet . state = 'veryHidden' ;
Lembar kerja mendukung keranjang properti untuk memungkinkan kontrol atas beberapa fitur lembar kerja.
// 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 ;
Properti yang Didukung
Nama | Bawaan | Keterangan |
---|---|---|
tabWarna | belum diartikan | Warna tab |
garis besarLevelKol | 0 | Tingkat kerangka kolom lembar kerja |
garis besarLevelRow | 0 | Tingkat kerangka baris lembar kerja |
defaultRowHeight | 15 | Tinggi baris default |
defaultColWidth | (opsional) | Lebar kolom default |
keturunan | 55 | TBD |
Beberapa metrik baru telah ditambahkan ke Lembar Kerja...
Nama | Keterangan |
---|---|
jumlah baris | Total ukuran baris dokumen. Sama dengan nomor baris dari baris terakhir yang memiliki nilai. |
jumlah baris aktual | Hitungan jumlah baris yang memiliki nilai. Jika baris tengah dokumen kosong, maka baris tersebut tidak akan disertakan dalam penghitungan. |
kolomHitungan | Total ukuran kolom dokumen. Sama dengan jumlah sel maksimum dari semua baris |
jumlah kolom aktual | Hitungan jumlah kolom yang memiliki nilai. |
Semua properti yang dapat mempengaruhi pencetakan suatu lembar disimpan dalam objek pageSetup pada lembar tersebut.
// 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' ;
Pengaturan pengaturan halaman yang didukung
Nama | Bawaan | Keterangan |
---|---|---|
margin | Spasi putih di tepi halaman. Satuannya adalah inci. | |
orientasi | 'potret' | Orientasi halaman - yaitu lebih tinggi (potret) atau lebih lebar (lanskap) |
horisontalDpi | 4294967295 | Titik Horisontal per Inci. Nilai defaultnya adalah -1 |
vertikalDpi | 4294967295 | Titik Vertikal per Inci. Nilai defaultnya adalah -1 |
fitToPage | Apakah akan menggunakan fitToWidth dan fitToHeight atau pengaturan skala. Default didasarkan pada keberadaan pengaturan ini di objek pageSetup - jika keduanya ada, skala menang (yaitu default akan salah) | |
halamanPesanan | 'turun lalu berakhir' | Urutan mana untuk mencetak halaman - salah satu dari ['downThenOver', 'overThenDown'] |
hitam dan putih | PALSU | Cetak tanpa warna |
draf | PALSU | Mencetak dengan kualitas (dan tinta) lebih sedikit |
komentar sel | 'Tidak ada' | Tempat menempatkan komentar - salah satu dari ['atEnd', 'asDisplayed', 'None'] |
kesalahan | 'ditampilkan' | Tempat menampilkan kesalahan - salah satu dari ['dash', 'blank', 'NA', 'displayed'] |
skala | 100 | Nilai persentase untuk menambah atau mengurangi ukuran cetakan. Aktif ketika fitToPage salah |
fitToWidth | 1 | Berapa lebar halaman yang harus dicetak pada lembaran tersebut. Aktif ketika fitToPage benar |
fitToHeight | 1 | Berapa tinggi halaman yang harus dicetak pada lembaran tersebut. Aktif ketika fitToPage benar |
ukuran kertas | Berapa ukuran kertas yang digunakan (lihat di bawah) | |
tampilkanRowColHeaders | PALSU | Apakah akan menampilkan nomor baris dan huruf kolom |
tampilkan Garis Grid | PALSU | Apakah akan menampilkan garis kisi |
NomorHalaman pertama | Nomor mana yang digunakan untuk halaman pertama | |
horisontalBerpusat | PALSU | Apakah akan memusatkan data sheet secara horizontal |
terpusat vertikal | PALSU | Apakah akan memusatkan data sheet secara vertikal |
Contoh Ukuran Kertas
Nama | Nilai |
---|---|
Surat | belum diartikan |
Legal | 5 |
Eksekutif | 7 |
A3 | 8 |
A4 | 9 |
A5 | 11 |
B5 (JIS) | 13 |
Amplop #10 | 20 |
Amplop DL | 27 |
Amplop C5 | 28 |
Amplop B5 | 34 |
Raja Amplop | 37 |
Kartu Pos Jepang Ganda Diputar | 82 |
16K 197x273mm | 119 |
Berikut cara menambahkan header dan footer. Konten yang ditambahkan sebagian besar berupa teks, seperti waktu, perkenalan, informasi file, dll., dan Anda dapat mengatur gaya teks. Selain itu, Anda dapat mengatur teks berbeda untuk halaman pertama dan halaman genap.
Catatan: Gambar saat ini tidak didukung.
// 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"
Pengaturan headerFooter yang didukung
Nama | Bawaan | Keterangan |
---|---|---|
berbedaPertama | PALSU | Tetapkan nilai differentialFirst sebagai true, yang menunjukkan bahwa header/footer untuk halaman pertama berbeda dengan halaman lainnya |
berbedaGanjilGenap | PALSU | Tetapkan nilai differentialOddEven sebagai true, yang menunjukkan bahwa header/footer untuk halaman ganjil dan genap berbeda |
ganjilHeader | batal | Setel string header untuk halaman ganjil (default), dapat memformat string |
anehFooter | batal | Setel string footer untuk halaman ganjil (default), dapat memformat string |
evenHeader | batal | Setel string header untuk halaman genap, dapat memformat string |
bahkanFooter | batal | Setel string footer untuk halaman genap, dapat memformat string |
Header pertama | batal | Setel string header untuk halaman pertama, bisa memformat string |
footer pertama | batal | Setel string footer untuk halaman pertama, bisa memformat string |
Perintah Skrip
Perintah | Keterangan |
---|---|
&L | Atur posisi ke kiri |
&C | Atur posisi ke tengah |
&R | Atur posisi ke kanan |
&P | Nomor halaman saat ini |
&N | Jumlah total halaman |
&D | Tanggal saat ini |
&T | Waktu saat ini |
&G | Sebuah gambar |
&A | Nama lembar kerja |
&F | Nama file |
&B | Buat teks menjadi tebal |
&SAYA | Cetak miring teks |
&kamu | Garis bawahi teks |
&"nama font" | nama font, misalnya &"Aril" |
&ukuran huruf | ukuran font, misalnya 12 |
&KHEXKode | warna font, misalnya &KCCCCCC |
Lembar kerja kini mendukung tampilan daftar, yang mengontrol cara Excel menyajikan lembar:
Setiap tampilan juga mendukung berbagai properti:
Nama | Bawaan | Keterangan |
---|---|---|
negara | 'normal' | Mengontrol status tampilan - normal, beku, atau terbagi |
kananKeKiri | PALSU | Mengatur orientasi tampilan lembar kerja ke kanan-ke-kiri |
sel aktif | belum diartikan | Sel yang saat ini dipilih |
showRuler | BENAR | Menampilkan atau menyembunyikan penggaris di Tata Letak Halaman |
tampilkanRowColHeaders | BENAR | Menampilkan atau menyembunyikan header baris dan kolom (misalnya A1, B1 di atas dan 1,2,3 di kiri |
tampilkan Garis Grid | BENAR | Menampilkan atau menyembunyikan garis kisi (ditampilkan untuk sel yang batasnya belum ditentukan) |
zoomScale | 100 | Persentase zoom yang akan digunakan untuk tampilan |
zoomScaleNormal | 100 | Zoom normal untuk tampilan |
gaya | belum diartikan | Gaya presentasi - salah satu pageBreakPreview atau pageLayout. Catatan pageLayout tidak kompatibel dengan tampilan beku |
Tampilan beku mendukung properti tambahan berikut:
Nama | Bawaan | Keterangan |
---|---|---|
xPisahkan | 0 | Berapa banyak kolom yang akan dibekukan. Untuk membekukan baris saja, setel ini ke 0 atau tidak ditentukan |
yPisahkan | 0 | Berapa banyak baris yang harus dibekukan. Untuk membekukan kolom saja, setel ini ke 0 atau tidak ditentukan |
sel kiri atas | spesial | Sel mana yang berada di kiri atas di panel kanan bawah. Catatan: tidak boleh berupa sel yang dibekukan. Defaultnya adalah sel yang pertama kali dicairkan |
worksheet . views = [
{ state : 'frozen' , xSplit : 2 , ySplit : 3 , topLeftCell : 'G10' , activeCell : 'A1' }
] ;
Tampilan terpisah mendukung properti tambahan berikut:
Nama | Bawaan | Keterangan |
---|---|---|
xPisahkan | 0 | Berapa titik dari kiri untuk menempatkan splitter. Untuk membagi secara vertikal, setel ini ke 0 atau tidak ditentukan |
yPisahkan | 0 | Berapa titik dari atas untuk menempatkan splitter. Untuk membagi secara horizontal, setel ini ke 0 atau tidak ditentukan |
sel kiri atas | belum diartikan | Sel mana yang berada di kiri atas di panel kanan bawah. |
panel aktif | belum diartikan | Panel mana yang akan aktif - salah satu dari topLeft, topRight, bottomLeft dan bottomRight |
worksheet . views = [
{ state : 'split' , xSplit : 2000 , ySplit : 3000 , topLeftCell : 'G10' , activeCell : 'A1' }
] ;
Dimungkinkan untuk menerapkan filter otomatis ke lembar kerja Anda.
worksheet . autoFilter = 'A1:C1' ;
Meskipun string rentang adalah bentuk standar autoFilter, lembar kerja juga akan mendukung nilai berikut:
// 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' ) ;
Parameter | Keterangan | Nilai Bawaan |
---|---|---|
nilai/s | Nilai baris baru | |
gaya | 'i' untuk mewarisi dari baris di atas, 'i+' untuk menyertakan sel kosong, 'n' untuk tidak ada | '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' ) ;
Parameter | Keterangan | Nilai Bawaan |
---|---|---|
pos | Nomor baris yang ingin Anda sisipkan, tekan semua baris dari sana | |
nilai/s | Nilai baris baru | |
gaya | 'i' untuk mewarisi dari baris di atas, , 'i+' untuk menyertakan sel kosong, 'o' untuk gaya asli, 'o+' untuk menyertakan sel kosong, 'n' untuk tidak ada | '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' ) ;
Parameter | Keterangan | Nilai Bawaan |
---|---|---|
awal | Titik awal untuk menyambung | |
menghitung | Jumlah baris/sel yang akan dihapus | |
... sisipan | Nilai baris/sel baru untuk disisipkan |
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 ) ;
Parameter | Keterangan | Nilai Bawaan |
---|---|---|
awal | Nomor baris yang ingin diduplikasi (pertama di excel adalah 1) | |
jumlah | Saat Anda ingin menduplikasi baris | 1 |
menyisipkan | benar jika Anda ingin menyisipkan baris baru untuk duplikat, atau salah jika Anda ingin menggantinya | BENAR |
Sel individual (atau beberapa kelompok sel) dapat diberi nama. Nama-nama tersebut dapat digunakan dalam rumus dan validasi data (dan mungkin lebih banyak lagi).
// 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' ] ) ;
Sel dapat menentukan nilai apa yang valid atau tidak dan memberikan petunjuk kepada pengguna untuk membantu memandu nilai tersebut.
Jenis validasi dapat berupa salah satu dari berikut ini:
Jenis | Keterangan |
---|---|
daftar | Tentukan kumpulan nilai valid yang terpisah. Excel akan menawarkan ini dalam dropdown untuk kemudahan masuk |
utuh | Nilainya harus berupa bilangan bulat |
desimal | Nilainya harus berupa angka desimal |
panjang teks | Nilainya mungkin berupa teks tetapi panjangnya dikontrol |
kebiasaan | Rumus khusus mengontrol nilai yang valid |
Untuk tipe selain daftar atau kustom, operator berikut memengaruhi validasi:
Operator | Keterangan |
---|---|
di antara | Nilai harus terletak di antara hasil rumus |
bukan di antara | Nilai tidak boleh terletak di antara hasil rumus |
setara | Nilai harus sama dengan hasil rumus |
tidak sama | Nilai tidak boleh sama dengan hasil rumus |
lebih besar dari | Nilai harus lebih besar dari hasil rumus |
kurang dari | Nilai harus lebih kecil dari hasil rumus |
lebih besarDariAtauSama | Nilai harus lebih besar atau sama dengan hasil rumus |
kurangDariAtauSama | Nilainya harus lebih kecil atau sama dengan hasil rumus |
// 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 ) ]
} ;
Tambahkan komentar gaya lama ke sel
// 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' ,
} ;
Tabel berikut mendefinisikan properti yang didukung oleh komentar sel.
Bidang | Diperlukan | Nilai Bawaan | Keterangan |
---|---|---|---|
teks | Y | Teks komentar | |
margin | N | {} | Menentukan nilai margin untuk komentar sel otomatis atau khusus |
perlindungan | N | {} | Menentukan status kunci objek dan teks objek menggunakan atribut perlindungan |
sunting Sebagai | N | 'mutlak' | Gunakan atribut 'editAs' untuk menentukan cara anotasi dipasang ke sel |
Tentukan mode pengaturan margin halaman anotasi sel, mode otomatis atau kustom.
ws . getCell ( 'B1' ) . note . margins = {
insetmode : 'custom' ,
inset : [ 0.25 , 0.25 , 0.35 , 0.35 ]
}
Milik | Diperlukan | Nilai Bawaan | Keterangan |
---|---|---|---|
mode masuk | N | 'mobil' | Menentukan apakah margin komentar diatur secara otomatis dan nilainya 'otomatis' atau 'kustom' |
sisipan | N | [0,13, 0,13, 0,25, 0,25] | Spasi putih di tepi komentar. Satuannya adalah sentimeter. Arahnya kiri, atas, kanan, bawah |
Catatan: Pengaturan inset
ini hanya berlaku bila nilai insetmode
adalah 'custom'.
Menentukan status kunci objek dan teks objek menggunakan atribut perlindungan.
ws . getCell ( 'B1' ) . note . protection = {
locked : 'False' ,
lockText : 'False' ,
} ;
Milik | Diperlukan | Nilai Bawaan | Keterangan |
---|---|---|---|
terkunci | N | 'BENAR' | Elemen ini menentukan bahwa objek dikunci saat sheet diproteksi |
kunciTeks | N | 'BENAR' | Elemen ini menentukan bahwa teks objek dikunci |
Catatan: Objek yang dikunci hanya valid jika lembar kerja diproteksi.
Komentar sel juga dapat memiliki properti 'editAs' yang akan mengontrol bagaimana komentar ditautkan ke sel. Itu dapat memiliki salah satu dari nilai berikut:
ws . getCell ( 'B1' ) . note . editAs = 'twoCells' ;
Nilai | Keterangan |
---|---|
dua sel | Ini menentukan bahwa ukuran dan posisi catatan bervariasi menurut sel |
satu sel | Ini menentukan bahwa ukuran uang tetap dan posisinya berubah seiring dengan sel |
mutlak | Ini adalah standarnya. Komentar tidak akan dipindahkan atau diukur dengan sel |
Tabel memungkinkan manipulasi data tabel dalam lembar.
Untuk menambahkan tabel ke lembar kerja, tentukan model tabel dan panggil 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 ] ,
] ,
} ) ;
Catatan: Menambahkan tabel ke lembar kerja akan mengubah lembar dengan menempatkan header dan data baris ke lembar. Data apa pun pada lembar yang dicakup oleh tabel yang dihasilkan (termasuk header dan total) akan ditimpa.
Tabel berikut mendefinisikan properti yang didukung oleh tabel.
Properti Tabel | Keterangan | Diperlukan | Nilai Bawaan |
---|---|---|---|
nama | Nama tabel | Y | |
nama tampilan | Nama tampilan tabel | N | nama |
referensi | Sel kiri atas tabel | Y | |
headerBaris | Tampilkan header di bagian atas tabel | N | BENAR |
totalBaris | Tampilkan total di bagian bawah tabel | N | PALSU |
gaya | Properti gaya ekstra | N | {} |
kolom | Definisi kolom | Y | |
baris | Deretan data | Y |
Tabel berikut mendefinisikan properti yang didukung dalam properti gaya tabel.
Properti Gaya | Keterangan | Diperlukan | Nilai Bawaan |
---|---|---|---|
tema | Tema warna meja | N | 'Gaya MejaMedium2' |
tampilkanKolom Pertama | Sorot kolom pertama (tebal) | N | PALSU |
tampilkan Kolom Terakhir | Sorot kolom terakhir (tebal) | N | PALSU |
tampilkanRowStripes | Baris alternatif ditampilkan dengan warna latar belakang | N | PALSU |
tampilkanColumnStripes | Baris alternatif ditampilkan dengan warna latar belakang | N | PALSU |
Tabel berikut mendefinisikan properti yang didukung dalam setiap kolom tabel.
Properti Kolom | Keterangan | Diperlukan | Nilai Bawaan |
---|---|---|---|
nama | Nama kolom, juga digunakan di header | Y | |
tombol filter | Mengalihkan kontrol filter di header | N | PALSU |
totalRowLabel | Label untuk mendeskripsikan baris total (kolom pertama) | N | 'Total' |
totalFungsi Baris | Nama fungsi total | N | 'tidak ada' |
totalRowFormula | Rumus opsional untuk fungsi kustom | N |
Tabel berikut mencantumkan nilai valid untuk properti totalsRowFunction yang ditentukan berdasarkan kolom. Jika ada nilai selain 'custom' yang digunakan, maka tidak perlu menyertakan rumus terkait karena nilai ini akan disisipkan dalam tabel.
Fungsi Total | Keterangan |
---|---|
tidak ada | Tidak ada fungsi total untuk kolom ini |
rata-rata | Hitung rata-rata untuk kolom tersebut |
hitunganNums | Hitung entri yang berupa angka |
menghitung | Jumlah entri |
maks | Nilai maksimum di kolom ini |
menit | Nilai minimum di kolom ini |
stdDev | Simpangan baku untuk kolom ini |
var | Varians untuk kolom ini |
jumlah | Jumlah entri untuk kolom ini |
kebiasaan | Formula khusus. Memerlukan nilai totalsRowFormula terkait. |
Nama tema yang valid mengikuti pola berikut:
Nuansa, Angka dapat berupa salah satu dari:
Untuk tanpa tema, gunakan nilai null.
Catatan: tema tabel khusus belum didukung oleh exceljs.
Tabel mendukung serangkaian fungsi manipulasi yang memungkinkan data ditambahkan atau dihapus dan beberapa properti diubah. Karena banyak dari operasi ini mungkin mempunyai efek pada lembar, perubahan harus dilakukan setelah selesai.
Semua nilai indeks pada tabel berbasis nol, sehingga nomor baris pertama dan nomor kolom pertama adalah 0.
Menambah atau Menghapus Header dan Total
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 ( ) ;
Memindahkan Meja
const table = ws . getTable ( 'MyTable' ) ;
// table top-left move to D4
table . ref = 'D4' ;
// commit the table changes into the sheet
table . commit ( ) ;
Menambah dan Menghapus Baris
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 ( ) ;
Menambah dan Menghapus Kolom
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 ( ) ;
Ubah Properti Kolom
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 ( ) ;
Sel, Baris, dan Kolom masing-masing mendukung serangkaian gaya dan format yang memengaruhi cara sel ditampilkan.
Gaya diatur dengan menetapkan properti berikut:
// 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 } ;
Saat gaya diterapkan ke baris atau kolom, gaya tersebut akan diterapkan ke semua sel yang ada saat ini di baris atau kolom tersebut. Selain itu, setiap sel baru yang dibuat akan mewarisi gaya awalnya dari baris dan kolom tempatnya berada.
Jika baris dan kolom sel menentukan gaya tertentu (misalnya font), sel akan menggunakan gaya baris di atas gaya kolom. Namun jika baris dan kolom menentukan gaya yang berbeda (misalnya kolom.numFmt dan baris.font), sel akan mewarisi font dari baris dan numFmt dari kolom.
Peringatan: Semua properti di atas (dengan pengecualian numFmt, yang merupakan string), adalah struktur objek JS. Jika objek gaya yang sama ditetapkan ke lebih dari satu entitas spreadsheet, maka setiap entitas akan berbagi objek gaya yang sama. Jika objek gaya kemudian dimodifikasi sebelum spreadsheet diserialkan, maka semua entitas yang mereferensikan objek gaya tersebut akan dimodifikasi juga. Perilaku ini dimaksudkan untuk memprioritaskan performa dengan mengurangi jumlah objek JS yang dibuat. Jika Anda ingin objek gaya menjadi independen, Anda perlu mengkloningnya sebelum menetapkannya. Selain itu, secara default, saat dokumen dibaca dari file (atau aliran) jika entitas spreadsheet berbagi gaya serupa, maka entitas tersebut juga akan mereferensikan objek gaya yang sama.
// 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
Properti Font | Keterangan | Contoh Nilai |
---|---|---|
nama | Nama font. | 'Arial', 'Calibri', dll. |
keluarga | Keluarga font untuk cadangan. Nilai bilangan bulat. | 1 - Serif, 2 - Sans Serif, 3 - Mono, Lainnya - tidak diketahui |
skema | Skema font. | 'kecil', 'mayor', 'tidak ada' |
rangkaian karakter | Kumpulan karakter font. Nilai bilangan bulat. | 1, 2, dst. |
ukuran | Ukuran huruf. Nilai bilangan bulat. | 9, 10, 12, 16, dst. |
warna | Deskripsi warna, suatu objek yang mengandung nilai ARGB. | {argb: 'FFFF0000'} |
berani | Berat font | benar, salah |
miring | Kemiringan font | benar, salah |
menggarisbawahi | Gaya garis bawah font | benar, salah, 'tidak ada', 'tunggal', 'ganda', 'Akuntansi tunggal', 'Akuntansi ganda' |
memukul | | benar, salah |
garis besar | Garis besar huruf | benar, salah |
Sejajarkan vertikal | Perataan vertikal | 'superskrip', 'subskrip' |
// 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' } ;
Nilai Properti Alignment yang Valid
horisontal | vertikal | bungkusTeks | menyusutToFit | indentasi | membacaPesanan | Rotasi teks |
---|---|---|---|---|---|---|
kiri | atas | BENAR | BENAR | bilangan bulat | rtl | 0 hingga 90 |
tengah | tengah | PALSU | PALSU | ltr | -1 hingga -90 | |
Kanan | dasar | vertikal | ||||
mengisi | didistribusikan | |||||
membenarkan | membenarkan | |||||
tengahTerus menerus | ||||||
didistribusikan |
// 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' } }
} ;
Gaya Perbatasan yang Valid
// 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' } }
]
} ;
Milik | Diperlukan | Keterangan |
---|---|---|
jenis | Y | Nilai: 'pola' Menentukan isian ini menggunakan pola |
pola | Y | Menentukan jenis pola (lihat Jenis Pola yang Valid di bawah) |
fgWarna | N | Menentukan warna latar depan pola. Standarnya berwarna hitam. |
bgWarna | N | Menentukan warna latar belakang pola. Standarnya berwarna putih. |
Catatan: Jika Anda ingin mengisi sel menggunakan pola solid
, Anda tidak perlu menentukan bgColor
. Lihat contoh di atas untuk sel A3
dengan pola solid
dan fgColor
koral.
Jenis Pola yang Valid
Milik | Diperlukan | Keterangan |
---|---|---|
jenis | Y | Nilai: 'gradien' Menentukan isian ini menggunakan gradien |
gradien | Y | Menentukan tipe gradien. Salah satu dari ['sudut', 'jalur'] |
derajat | sudut | Untuk gradien 'sudut', tentukan arah gradien. 0 dari kiri ke kanan. Nilai dari 1 – 359 berputar searah jarum jam |
tengah | jalur | Untuk gradien 'jalur'. Menentukan koordinat relatif untuk awal jalur. nilai 'kiri' dan 'atas' berkisar dari 0 hingga 1 |
berhenti | Y | Menentukan urutan warna gradien. Merupakan array objek yang berisi posisi dan warna yang dimulai dengan posisi 0 dan diakhiri dengan posisi 1. Posisi perantara dapat digunakan untuk menentukan warna lain pada jalur. |
Peringatan
Dengan menggunakan antarmuka di atas, dimungkinkan untuk membuat efek pengisian gradien yang tidak mungkin dilakukan menggunakan program editor XLSX. Misalnya, Excel hanya mendukung gradien sudut 0, 45, 90 dan 135. Demikian pula urutan perhentian juga dapat dibatasi oleh UI dengan posisi [0,1] atau [0,0.5,1] sebagai satu-satunya pilihan. Berhati-hatilah dengan pengisian ini untuk memastikannya didukung oleh target pemirsa XLSX.
Masing-masing sel kini mendukung teks kaya atau pemformatan dalam sel. Nilai teks kaya dapat mengontrol properti font dari sejumlah sub-string dalam nilai teks. Lihat Font untuk daftar lengkap detail tentang properti font apa yang didukung.
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 ) ;
Perlindungan tingkat sel dapat dimodifikasi menggunakan properti perlindungan.
ws . getCell ( 'A1' ) . protection = {
locked : false ,
hidden : true ,
} ;
Properti Perlindungan yang Didukung
Milik | Bawaan | Keterangan |
---|---|---|
terkunci | BENAR | Menentukan apakah sel akan dikunci jika lembar dilindungi. |
tersembunyi | PALSU | Menentukan apakah rumus sel akan terlihat jika lembar diproteksi. |
Pemformatan bersyarat memungkinkan lembar menampilkan gaya, ikon, dll tertentu, bergantung pada nilai sel atau rumus arbitrer apa pun.
Aturan pemformatan bersyarat ditambahkan pada tingkat lembar dan biasanya mencakup rentang sel.
Beberapa aturan dapat diterapkan pada rentang sel tertentu dan setiap aturan akan menerapkan gayanya sendiri.
Jika beberapa aturan memengaruhi sel tertentu, nilai prioritas aturan akan menentukan aturan mana yang menang jika gaya yang bersaing bertabrakan. Aturan dengan nilai prioritas lebih rendah akan menang. Jika nilai prioritas tidak ditentukan untuk aturan tertentu, ExcelJS akan menetapkannya dalam urutan menaik.
Catatan: saat ini, hanya sebagian aturan pemformatan bersyarat yang didukung. Secara khusus, hanya aturan pemformatan yang tidak memerlukan rendering XML di dalam elemen <extLst>. Ini berarti kumpulan data dan tiga kumpulan ikon tertentu (3Triangles, 3Stars, 5Boxes) tidak didukung.
// 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' } } } ,
}
]
} )
Jenis Aturan Pemformatan Bersyarat yang Didukung
Jenis | Keterangan |
---|---|
ekspresi | Fungsi khusus apa pun dapat digunakan untuk mengaktifkan aturan. |
selIs | Membandingkan nilai sel dengan rumus yang disediakan menggunakan operator yang ditentukan |
10 teratas | Menerapkan pemformatan ke sel dengan nilai di rentang atas (atau bawah). |
di atas rata-rata | Menerapkan pemformatan ke sel dengan nilai di atas (atau di bawah) rata-rata |
skala warna | Menerapkan latar belakang berwarna ke sel berdasarkan letak nilainya dalam rentang |
set ikon | Menambahkan salah satu dari serangkaian ikon ke sel berdasarkan nilai |
berisi Teks | Menerapkan pemformatan berdasarkan apakah sel merupakan teks tertentu |
Periode waktu | Menerapkan pemformatan berdasarkan apakah nilai tanggal waktu sel berada dalam rentang yang ditentukan |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'ekspresi' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
rumus | array 1 string rumus yang mengembalikan nilai benar/salah. Untuk mereferensikan nilai sel, gunakan alamat sel kiri atas | ||
gaya | struktur gaya untuk diterapkan jika rumus mengembalikan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'selIs' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
operator | cara membandingkan nilai sel dengan hasil rumus | ||
rumus | array dari 1 string rumus yang mengembalikan nilai untuk dibandingkan dengan setiap sel | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Sel Adalah Operator
Operator | Keterangan |
---|---|
setara | Terapkan format jika nilai sel sama dengan nilai rumus |
lebih besar dari | Terapkan format jika nilai sel lebih besar dari nilai rumus |
kurang dari | Terapkan format jika nilai sel lebih kecil dari nilai rumus |
di antara | Terapkan format jika nilai sel berada di antara dua nilai rumus (inklusif) |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | '10 teratas' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
pangkat | Y | 10 | menentukan berapa banyak nilai teratas (atau terbawah) yang disertakan dalam pemformatan |
persen | Y | PALSU | jika benar, bidang peringkatnya adalah persentase, bukan absolut |
dasar | Y | PALSU | jika benar, nilai terbawah akan disertakan, bukan nilai teratas |
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'di atas rata-rata' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
di atas rata-rata | Y | PALSU | jika benar, bidang peringkatnya adalah persentase, bukan absolut |
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'Skala warna' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
cfvo | array yang terdiri dari 2 hingga 5 Objek Nilai Pemformatan Bersyarat yang menentukan titik jalan dalam rentang nilai | ||
warna | susunan warna yang sesuai untuk digunakan pada titik jalan tertentu | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'set ikon' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
set ikon | Y | 3Lampu Lalu Lintas | nama ikon yang akan digunakan |
nilai pertunjukan | BENAR | Menentukan apakah sel dalam rentang yang diterapkan menampilkan ikon dan nilai sel, atau hanya ikon saja | |
balik | PALSU | Menentukan apakah ikon dalam kumpulan ikon yang ditentukan dalam iconSet ditampilkan dalam urutan cadangan. Jika custom sama dengan "true", nilai ini harus diabaikan | |
kebiasaan | PALSU | Menentukan apakah sekumpulan ikon khusus digunakan | |
cfvo | array yang terdiri dari 2 hingga 5 Objek Nilai Pemformatan Bersyarat yang menentukan titik jalan dalam rentang nilai | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'bilah data' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
minPanjang | 0 | Menentukan panjang bilah data terpendek dalam rentang pemformatan bersyarat ini | |
panjang maksimal | 100 | Menentukan panjang bilah data terpanjang dalam rentang pemformatan bersyarat ini | |
nilai pertunjukan | BENAR | Menentukan apakah sel dalam rentang pemformatan bersyarat menampilkan bilah data dan nilai numerik atau bilah data | |
gradien | BENAR | Menentukan apakah bilah data memiliki isian gradien | |
berbatasan | BENAR | Menentukan apakah bilah data memiliki batas | |
negatifBarColorSameAsPositif | BENAR | Menentukan apakah bilah data memiliki warna bilah negatif yang berbeda dengan warna bilah positif | |
negatifBarBorderColorSameAsPositif | BENAR | Menentukan apakah bilah data memiliki warna batas negatif yang berbeda dengan warna batas positif | |
posisi sumbu | 'mobil' | Menentukan posisi sumbu untuk bilah data | |
arah | 'kiri ke kanan' | Menentukan arah bilah data | |
cfvo | array yang terdiri dari 2 hingga 5 Objek Nilai Pemformatan Bersyarat yang menentukan titik jalan dalam rentang nilai | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'berisi Teks' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
operator | jenis perbandingan teks | ||
teks | teks yang akan dicari | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Berisi Operator Teks
Operator | Keterangan |
---|---|
berisi Teks | Terapkan format jika nilai sel berisi nilai yang ditentukan di bidang 'teks' |
berisiKosong | Terapkan format jika nilai sel berisi kosong |
tidakBerisiKosong | Terapkan format jika nilai sel tidak berisi kosong |
berisi Kesalahan | Terapkan format jika nilai sel mengandung kesalahan |
tidakBerisi Kesalahan | Terapkan format jika nilai sel tidak mengandung kesalahan |
Bidang | Opsional | Bawaan | Keterangan |
---|---|---|---|
jenis | 'Periode Waktu' | ||
prioritas | Y | <otomatis> | menentukan urutan prioritas gaya |
Periode waktu | periode waktu apa untuk membandingkan nilai sel | ||
gaya | struktur gaya yang akan diterapkan jika perbandingan menghasilkan nilai true |
Periode Waktu
Periode Waktu | Keterangan |
---|---|
minggu lalu | Terapkan format jika nilai sel turun dalam seminggu terakhir |
minggu ini | Terapkan format jika nilai sel turun pada minggu ini |
minggu depan | Terapkan format jika nilai sel turun pada minggu depan |
Kemarin | Terapkan format jika nilai sel sama dengan kemarin |
Hari ini | Terapkan format jika nilai sel sama dengan hari ini |
besok | Terapkan format jika nilai sel sama dengan besok |
7 hari terakhir | Terapkan format jika nilai sel turun dalam 7 hari terakhir |
bulan lalu | Terapkan format jika nilai sel turun pada bulan lalu |
bulan ini | Terapkan format jika nilai sel turun di bulan ini |
bulan depan | Terapkan format jika nilai sel turun di bulan depan |
Excel mendukung pembuatan kerangka; di mana baris atau kolom dapat diperluas atau diciutkan tergantung pada tingkat detail yang ingin dilihat pengguna.
Tingkat kerangka dapat ditentukan dalam pengaturan kolom:
worksheet . columns = [
{ header : 'Id' , key : 'id' , width : 10 } ,
{ header : 'Name' , key : 'name' , width : 32 } ,
{ header : 'D.O.B.' , key : 'DOB' , width : 10 , outlineLevel : 1 }
] ;
Atau langsung pada baris atau kolom
worksheet . getColumn ( 3 ) . outlineLevel = 1 ;
worksheet . getRow ( 3 ) . outlineLevel = 1 ;
Tingkat kerangka lembar dapat diatur pada lembar kerja
// set column outline level
worksheet . properties . outlineLevelCol = 1 ;
// set row outline level
worksheet . properties . outlineLevelRow = 1 ;
Catatan: menyesuaikan tingkat kerangka pada baris atau kolom atau tingkat kerangka pada lembar kerja akan menimbulkan efek samping juga memodifikasi properti yang diciutkan dari semua baris atau kolom yang terpengaruh oleh perubahan properti. Misalnya:
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 ;
Properti kerangka dapat diatur pada lembar kerja
worksheet . properties . outlineProperties = {
summaryBelow : false ,
summaryRight : false ,
} ;
Menambahkan gambar ke lembar kerja adalah proses dua langkah. Pertama, gambar ditambahkan ke buku kerja melalui fungsi addImage() yang juga akan mengembalikan nilai imageId. Kemudian, dengan menggunakan imageId, gambar tersebut dapat ditambahkan ke lembar kerja baik sebagai latar belakang ubin atau menutupi rentang sel.
Catatan: Pada versi ini, penyesuaian atau transformasi gambar tidak didukung dan gambar tidak didukung dalam mode streaming.
Fungsi Workbook.addImage mendukung penambahan gambar berdasarkan nama file atau Buffer. Perhatikan bahwa dalam kedua kasus, ekstensi harus ditentukan. Nilai ekstensi yang valid mencakup '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' ,
} ) ;
Menggunakan id gambar dari Workbook.addImage, latar belakang lembar kerja dapat diatur menggunakan fungsi addBackgroundImage
// set background
worksheet . addBackgroundImage ( imageId1 ) ;
Menggunakan id gambar dari Workbook.addImage, gambar dapat disematkan dalam lembar kerja untuk mencakup suatu rentang. Koordinat yang dihitung dari rentang akan mencakup dari kiri atas sel pertama hingga kanan bawah sel kedua.
// insert an image over B2:D6
worksheet . addImage ( imageId2 , 'B2:D6' ) ;
Dengan menggunakan struktur alih-alih string rentang, dimungkinkan untuk menutupi sebagian sel.
Perhatikan bahwa sistem koordinat yang digunakan adalah berbasis nol, sehingga kiri atas A1 adalah { kolom: 0, baris: 0 }. Pecahan sel dapat ditentukan dengan menggunakan angka floating point, misalnya titik tengah A1 adalah { 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 }
} ) ;
Kisaran sel juga dapat memiliki properti 'editas' yang akan mengontrol bagaimana gambar berlabuh ke sel itu dapat memiliki salah satu nilai berikut:
Nilai | Keterangan |
---|---|
belum diartikan | Itu menentukan gambar akan dipindahkan dan diukur dengan sel |
Onecell | Ini adalah default. Gambar akan dipindahkan dengan sel tetapi tidak berukuran |
mutlak | Gambar tidak akan dipindahkan atau diukur dengan sel |
ws . addImage ( imageId , {
tl : { col : 0.1125 , row : 0.4 } ,
br : { col : 2.101046875 , row : 3.4 } ,
editAs : 'oneCell'
} ) ;
Anda dapat menambahkan gambar ke sel dan kemudian menentukan lebar dan tinggi dalam piksel pada 96dpi.
worksheet . addImage ( imageId2 , {
tl : { col : 0 , row : 0 } ,
ext : { width : 500 , height : 200 }
} ) ;
Anda dapat menambahkan gambar dengan hyperlink ke sel, dan mendefinisikan hyperlink dalam rentang gambar.
worksheet . addImage ( imageId2 , {
tl : { col : 0 , row : 0 } ,
ext : { width : 500 , height : 200 } ,
hyperlinks : {
hyperlink : 'http://www.somewhere.com' ,
tooltip : 'http://www.somewhere.com'
}
} ) ;
Lembar kerja dapat dilindungi dari modifikasi dengan menambahkan kata sandi.
await worksheet . protect ( 'the-password' , options ) ;
Perlindungan lembar kerja juga dapat dihapus:
worksheet . unprotect ( ) ;
Lihat Perlindungan Sel untuk detail tentang cara memodifikasi perlindungan sel individu.
Catatan: Sementara fungsi Protect () mengembalikan janji yang menunjukkan bahwa itu adalah async, implementasi saat ini berjalan pada utas utama dan akan menggunakan sekitar 600ms pada CPU rata -rata. Ini dapat disesuaikan dengan mengatur spincount, yang dapat digunakan untuk membuat proses lebih cepat atau lebih tangguh.
Bidang | Bawaan | Keterangan |
---|---|---|
SelectLockedCells | BENAR | Memungkinkan pengguna memilih sel yang terkunci |
SelectunlockedCells | BENAR | Memungkinkan pengguna memilih sel yang tidak terkunci |
Formatcells | PALSU | Memungkinkan sel format pengguna |
FormatColumns | PALSU | Memungkinkan kolom format pengguna |
formatrows | PALSU | Memungkinkan baris format pengguna |
Inertrow | PALSU | Memungkinkan pengguna memasukkan baris |
InsertColumns | PALSU | Memungkinkan pengguna memasukkan kolom |
Inserthyperlinks | PALSU | Memungkinkan pengguna memasukkan hyperlink |
deleterow | PALSU | Memungkinkan pengguna menghapus baris |
Deletecolumns | PALSU | Memungkinkan pengguna menghapus kolom |
menyortir | PALSU | Memungkinkan pengguna mengurutkan data |
Autofilter | PALSU | Memungkinkan pengguna memfilter data dalam tabel |
Pivottable | PALSU | Memungkinkan pengguna menggunakan tabel pivot |
Spincount | 100.000 | Jumlah iterasi hash yang dilakukan saat melindungi atau tidak melindungi |
Opsi didukung saat membaca file XLSX.
Bidang | Diperlukan | Jenis | Keterangan |
---|---|---|---|
ketidaktahuan | N | Himpunan | Daftar nama simpul untuk diabaikan saat memuat dokumen XLSX. Meningkatkan kinerja dalam beberapa situasi. Tersedia: sheetPr , dimension , sheetViews , sheetFormatPr , cols , sheetData , autoFilter , mergeCells , rowBreaks , hyperlinks , pageMargins , dataValidations , pageSetup , headerFooter , printOptions , picture , drawing , sheetProtection , tableParts , extLst conditionalFormatting |
// 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 ( ) ;
Opsi didukung saat membaca file CSV.
Bidang | Diperlukan | Jenis | Keterangan |
---|---|---|---|
format tanggal | N | Himpunan | Tentukan format pengkodean tanggal DayJS. |
peta | N | Fungsi | Fungsi panggilan balik array.prototype.map () untuk memproses data. |
Sheetname | N | Rangkaian | Tentukan nama lembar kerja. |
Parseropsi | N | Obyek | Opsi ParseOptions @Modul Fast-CSV/Format untuk Menulis Data 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
Parser CSV menggunakan FAST-CSV untuk membaca file CSV. Formattertoptions dalam opsi yang diteruskan ke fungsi tulis di atas akan diteruskan ke modul @fast-CSV/format untuk menulis data CSV. Silakan merujuk ke ReadMe.MD Fast-CSV untuk detailnya.
Tanggal diuraikan menggunakan modul NPM dayjs. Jika array DateFormats tidak disediakan, format tanggal berikut digunakan:
Silakan merujuk ke plugin DayJS CustomParsEformat untuk detail tentang cara menyusun Format Tanggal.
Opsi didukung saat menulis ke file CSV.
Bidang | Diperlukan | Jenis | Keterangan |
---|---|---|---|
format date | N | Rangkaian | Tentukan format pengkodean tanggal DayJS. |
dateutc | N | Boolean | Tentukan apakah exceljs menggunakan dayjs.utc () untuk mengonversi zona waktu untuk tanggal penguraian. |
pengkodean | N | Rangkaian | Tentukan format pengkodean file. (Hanya berlaku untuk .writeFile .) |
Termasuk Imptyrows | N | Boolean | Menentukan apakah baris kosong dapat ditulis. |
peta | N | Fungsi | Fungsi panggilan balik array.prototype.map () untuk memproses nilai baris. |
Sheetname | N | Rangkaian | Tentukan nama lembar kerja. |
sheetid | N | Nomor | Tentukan ID Lembar Kerja. |
Formattertoptions | N | Obyek | Opsi formatterttions @Modul Fast-CSV/Format untuk menulis data 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 ( ) ;
Parser CSV menggunakan FAST-CSV untuk menulis file CSV. Formattertoptions dalam opsi yang diteruskan ke fungsi tulis di atas akan diteruskan ke modul @fast-CSV/format untuk menulis data CSV. Silakan merujuk ke ReadMe.MD Fast-CSV untuk detailnya.
Tanggal diformat menggunakan modul NPM Dayjs. Jika tidak ada tanggal yang disediakan, dayjs.iso_8601 digunakan. Saat menulis CSV, Anda dapat menyediakan dateutc boolean sebagai benar untuk membuat exceljs menguraikan tanggal tanpa secara otomatis mengonversi zona waktu menggunakan dayjs.utc()
.
File I/O yang didokumentasikan di atas mensyaratkan bahwa seluruh buku kerja dibangun di dalam memori sebelum file dapat ditulis. Meskipun nyaman, itu dapat membatasi ukuran dokumen karena jumlah memori yang dibutuhkan.
Seorang penulis streaming (atau pembaca) memproses buku kerja atau data lembar kerja seperti yang dihasilkan, mengubahnya menjadi bentuk file seperti yang terjadi. Biasanya ini jauh lebih efisien pada memori karena jejak memori akhir dan bahkan jejak kaki memori perantara jauh lebih kompak daripada dengan versi dokumen, terutama ketika Anda menganggap bahwa baris dan objek sel dibuang begitu mereka dilakukan.
Antarmuka ke buku kerja streaming dan lembar kerja hampir sama dengan versi dokumen dengan beberapa perbedaan praktis kecil:
Perhatikan bahwa dimungkinkan untuk membangun seluruh buku kerja tanpa melakukan barisan. Ketika buku kerja dilakukan, semua lembar kerja yang ditambahkan (termasuk semua baris yang tidak berkomitmen) akan secara otomatis dilakukan. Namun dalam hal ini, sedikit yang akan diperoleh dari versi dokumen.
Penulis buku kerja streaming XLSX tersedia di namespace exceljs.stream.xlsx.
Konstruktor mengambil objek opsi opsional dengan bidang berikut:
Bidang | Keterangan |
---|---|
sungai kecil | Menentukan aliran yang dapat ditulis untuk menulis buku kerja XLSX. |
nama file | Jika aliran tidak ditentukan, bidang ini menentukan jalur ke file untuk menulis buku kerja XLSX. |
Usesharedstrings | Menentukan apakah akan menggunakan string bersama di buku kerja. Default false . |
Usestyles | Menentukan apakah akan menambahkan informasi gaya ke buku kerja. Gaya dapat menambah overhead kinerja. Default false . |
ritsleting | Opsi Zip yang Exceljs secara internal diteruskan ke pengarsipan. Default undefined . |
Jika aliran maupun nama file tidak ditentukan dalam opsi, penulis buku kerja tidak akan membuat objek Streampbuf yang akan menyimpan konten buku kerja XLSX di memori. Objek StreamBuf ini, yang dapat diakses melalui buku kerja properti.stream, dapat digunakan untuk mengakses byte secara langsung dengan stream.read () atau untuk menyalurkan konten ke aliran lain.
// 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 ) ;
Secara umum, antarmuka ke streaming XLSX Writer adalah sama dengan buku kerja dokumen (dan lembar kerja) yang dijelaskan di atas, pada kenyataannya objek baris, sel dan gaya adalah sama.
Namun ada beberapa perbedaan ...
Konstruksi
Seperti yang terlihat di atas, WorkBookWriter biasanya akan membutuhkan aliran output atau file yang akan ditentukan dalam konstruktor.
Melakukan data
Ketika baris kerja siap, itu harus dilakukan sehingga objek baris dan konten dapat dibebaskan. Biasanya ini akan dilakukan karena setiap baris ditambahkan ...
worksheet . addRow ( {
id : i ,
name : theName ,
etc : someOtherDetail
} ) . commit ( ) ;
Alasan Worksheetwriter tidak melakukan baris karena ditambahkan adalah untuk memungkinkan sel untuk digabungkan di barisan:
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.
Karena setiap lembar kerja selesai, itu juga harus dilakukan:
// Finished adding data. Commit the worksheet
worksheet . commit ( ) ;
Untuk melengkapi dokumen XLSX, buku kerja harus dilakukan. Jika ada lembar kerja di buku kerja yang tidak berkomitmen, mereka akan dilakukan secara otomatis sebagai bagian dari komitmen buku kerja.
// Finished the workbook.
await workbook . commit ( ) ;
// ... the stream has been written
Pembaca Buku Kerja XLSX Streaming tersedia di namespace exceljs.stream.xlsx.
Konstruktor mengambil argumen input yang diperlukan dan argumen opsi opsional:
Argumen | Keterangan |
---|---|
input (diperlukan) | Menentukan nama file atau aliran yang dapat dibaca untuk membaca buku kerja XLSX. |
opsi (opsional) | Menentukan cara menangani jenis peristiwa yang terjadi selama parsing baca. |
opsi. Masuk | Menentukan apakah akan memancarkan entri ( 'emit' ) atau tidak ( 'ignore' ). Default adalah 'emit' . |
option.sharedstrings | Menentukan apakah akan cache string berbagi ( 'cache' ), yang memasukkannya ke dalam nilai sel masing -masing, atau apakah akan memancarkannya ( 'emit' ) atau mengabaikannya ( 'ignore' ), dalam kedua kasus itu nilai sel akan menjadi referensi ke indeks string bersama. Default adalah 'cache' . |
opsi.hyperlinks | Menentukan apakah akan cache hyperlink ( 'cache' ), yang memasukkannya ke dalam sel masing -masing, apakah akan memancarkannya ( 'emit' ) atau apakah akan mengabaikannya ( 'ignore' ). Default adalah 'cache' . |
Options.Styles | Menentukan apakah akan cache styles ( 'cache' ), yang memasukkannya ke dalam baris dan sel masing -masing, atau apakah akan mengabaikannya ( 'ignore' ). Default adalah 'cache' . |
opsi.worksheets | Menentukan apakah akan memancarkan lembar kerja ( 'emit' ) atau tidak ( 'ignore' ). Default adalah 'emit' . |
const workbookReader = new ExcelJS . stream . xlsx . WorkbookReader ( './file.xlsx' ) ;
for await ( const worksheetReader of workbookReader ) {
for await ( const row of worksheetReader ) {
// ...
}
}
Harap dicatat bahwa worksheetReader
mengembalikan array baris daripada setiap baris secara individual untuk alasan kinerja: nodeJS/node#31979
Acara di Workbook adalah 'Lembar Kerja', 'String Shared' dan 'Hyperlinks'. Acara di lembar kerja adalah 'baris' dan 'hyperlink'.
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
}
}
Meskipun kami sangat menganjurkan untuk menggunakan iterasi asinkronisasi, kami juga mengekspos antarmuka streaming untuk kompatibilitas ke belakang.
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 ) => {
// ...
} ) ;
Sebagian dari perpustakaan ini telah diisolasi dan diuji untuk digunakan dalam lingkungan browser.
Karena sifat streaming pembaca buku kerja dan penulis buku kerja, ini belum dimasukkan. Hanya buku kerja berbasis dokumen yang dapat digunakan (lihat Buat buku kerja untuk detailnya).
Misalnya kode menggunakan exceljs di browser lihat folder spec/browser di repo github.
File-file berikut telah dibundel sebelumnya dan termasuk di dalam folder Dist.
Jenis nilai berikut didukung.
Enum: excel.valuetype.null
Nilai nol menunjukkan tidak adanya nilai dan biasanya tidak akan disimpan saat ditulis untuk mengajukan (kecuali untuk sel gabungan). Ini dapat digunakan untuk menghapus nilai dari sel.
Misalnya
worksheet . getCell ( 'A1' ) . value = null ;
Enum: excel.valuetype.merge
Sel gabungan adalah sel yang memiliki nilainya terikat pada sel 'master' lainnya. Menugaskan sel gabungan akan menyebabkan sel master dimodifikasi.
Enum: excel.valuetype.number
Nilai numerik.
Misalnya
worksheet . getCell ( 'A1' ) . value = 5 ;
worksheet . getCell ( 'A2' ) . value = 3.14159 ;
Enum: excel.valuetype.string
String teks sederhana.
Misalnya
worksheet . getCell ( 'A1' ) . value = 'Hello, World!' ;
Enum: excel.valuetype.date
Nilai tanggal, diwakili oleh jenis tanggal JavaScript.
Misalnya
worksheet . getCell ( 'A1' ) . value = new Date ( 2017 , 2 , 15 ) ;
Enum: excel.valuetype.hyperlink
URL dengan nilai teks dan tautan.
Misalnya
// 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
Rumus Excel untuk menghitung nilai dengan cepat. Perhatikan bahwa sementara tipe sel akan berupa rumus, sel mungkin memiliki nilai efek efektif yang akan diturunkan dari nilai hasil.
Perhatikan bahwa excelj tidak dapat memproses formula untuk menghasilkan hasil, itu harus disediakan.
Perhatikan bahwa fungsi nama semantik harus dalam bahasa Inggris dan pemisah harus koma.
Misalnya
worksheet . getCell ( 'A3' ) . value = { formula : 'A1+A2' , result : 7 } ;
worksheet . getCell ( 'A3' ) . value = { formula : 'SUM(A1,A2)' , result : 7 } ;
Sel juga mendukung getters kenyamanan untuk mengakses formula dan hasilnya:
worksheet . getCell ( 'A3' ) . formula === 'A1+A2' ;
worksheet . getCell ( 'A3' ) . result === 7 ;
Rumus bersama meningkatkan kompresi dokumen XLSX dengan mengurangi pengulangan teks dalam lembar kerja XML. Sel kiri atas dalam kisaran adalah master yang ditunjuk dan akan menahan formula yang akan diperoleh oleh semua sel lain dalam kisaran. Sel -sel 'budak' lainnya kemudian dapat merujuk pada sel master ini alih -alih mendefinisikan kembali seluruh formula lagi. Perhatikan bahwa formula master akan diterjemahkan ke sel -sel budak dengan cara Excel biasa sehingga referensi ke sel lain akan digeser ke bawah dan ke kanan tergantung pada offset budak ke master. Misalnya: Jika sel master A2 memiliki rumus yang merujuk A1 maka jika sel B2 berbagi rumus A2, maka itu akan merujuk B1.
Formula master dapat ditugaskan ke sel bersama dengan sel -sel budak dalam jangkauannya
worksheet . getCell ( 'A2' ) . value = {
formula : 'A1' ,
result : 10 ,
shareType : 'shared' ,
ref : 'A2:B3'
} ;
Formula bersama dapat ditugaskan ke sel menggunakan formulir nilai baru:
worksheet . getCell ( 'B2' ) . value = { sharedFormula : 'A2' , result : 10 } ;
Ini menentukan bahwa sel B2 adalah formula yang akan berasal dari formula di A2 dan hasilnya adalah 10.
Formula Convenience Getter akan menerjemahkan formula di A2 ke apa yang seharusnya di B2:
expect ( worksheet . getCell ( 'B2' ) . formula ) . to . equal ( 'B1' ) ;
Rumus bersama dapat ditetapkan ke dalam lembar menggunakan fungsi '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 juga dapat menggunakan fungsi panggilan balik untuk menghitung nilai di setiap sel
// fill A2 to A100 with ascending count starting from A1
worksheet . fillFormula ( 'A2:A100' , 'A1+1' , ( row , col ) => row ) ;
Untuk membedakan antara sel formula nyata dan yang diterjemahkan, gunakan pengambil formulatype:
worksheet . getCell ( 'A3' ) . formulaType === Enums . FormulaType . Master ;
worksheet . getCell ( 'B3' ) . formulaType === Enums . FormulaType . Shared ;
Jenis rumus memiliki nilai -nilai berikut:
Nama | Nilai |
---|---|
Enums.Formulatype.none | 0 |
Enums.Formulatype.master | 1 |
Enums.Formulatype.shared | 2 |
Cara baru untuk mengekspresikan formula bersama di Excel adalah rumus array. Dalam bentuk ini, sel master adalah satu -satunya sel yang berisi informasi apa pun yang berkaitan dengan formula. Ini berisi 'array' sharetype bersama dengan kisaran sel yang berlaku untuk dan formula yang akan disalin. Sisa sel adalah sel reguler dengan nilai reguler.
Catatan: Rumus array tidak diterjemahkan dengan cara rumus bersama. Jadi jika sel master A2 mengacu pada A1, maka sel budak B2 juga akan merujuk ke A1.
Misalnya
// 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
Fungsi FillFormula juga dapat digunakan untuk mengisi formula array
// fill A2:B3 with array formula "A1"
worksheet . fillFormula ( 'A2:B3' , 'A1' , [ 1 , 1 , 1 , 1 ] , 'array' ) ;
Enum: excel.valuetype.richtext
Teks yang kaya dan bergaya.
Misalnya
worksheet . getCell ( 'A1' ) . value = {
richText : [
{ text : 'This is ' } ,
{ font : { italic : true } , text : 'italic' } ,
]
} ;
Enum: excel.valuetype.boolean
Misalnya
worksheet . getCell ( 'A1' ) . value = true ;
worksheet . getCell ( 'A2' ) . value = false ;
Enum: excel.valuetype.error
Misalnya
worksheet . getCell ( 'A1' ) . value = { error : '#N/A' } ;
worksheet . getCell ( 'A2' ) . value = { error : '#VALUE!' } ;
Nilai teks kesalahan yang valid saat ini adalah:
Nama | Nilai |
---|---|
Excel.errorvalue.notapplicle | #T/A |
Excel.errorvalue.ref | #REF! |
Excel.errorvalue.name | #NAMA? |
Excel.ErrorValue.Divzero | #DIV/0! |
Excel.ErrorValue.null | #BATAL! |
Excel.ErrorValue.Value | #NILAI! |
Excel.errorvalue.num | #JUMLAH! |
Setiap upaya dilakukan untuk membuat antarmuka yang konsisten yang baik yang tidak menerobos versi tetapi sayangnya, sekarang dan kemudian beberapa hal harus berubah untuk kebaikan yang lebih besar.
Argumen dalam fungsi callback ke lembar kerja. Eachrow telah ditukar dan diubah; Itu fungsi (Rownumber, RowValues), sekarang ini adalah fungsi (Row, Rownumber) yang memberikan tampilan dan terasa lebih seperti fungsi dan prioritas underscore (_.each) dan prioritas objek baris di atas nomor baris.
Fungsi ini telah berubah dari mengembalikan array nilai sel yang jarang menjadi mengembalikan objek baris. Ini memungkinkan mengakses properti baris dan akan memfasilitasi pengelolaan gaya baris dan sebagainya.
Array nilai sel yang jarang masih tersedia melalui worksheet.getrow (Rownumber) .values;
Cell.Tyles berganti nama menjadi Cell.Style
Janji -janji yang dikembalikan dari fungsi yang dialihkan dari Bluebird ke janji node asli yang dapat memecahkan kode panggilan jika mereka mengandalkan fitur tambahan Bluebird.
Untuk mengurangi ini, dua perubahan berikut ditambahkan ke 0.3.0:
Exceljs sekarang mendukung injeksi ketergantungan untuk perpustakaan janji. Anda dapat mengembalikan janji Bluebird dengan memasukkan kode berikut dalam modul Anda ...
ExcelJS . config . setValue ( 'promise' , require ( 'bluebird' ) ) ;
Harap dicatat: Saya telah menguji exceljs dengan Bluebird secara khusus (karena sampai saat ini ini adalah perpustakaan yang digunakan). Dari tes yang telah saya lakukan itu tidak akan bekerja dengan Q.
Sebelum menerbitkan modul ini, kode sumber ditranspilasi dan diproses sebelum ditempatkan di folder Dist/. ReadMe ini mengidentifikasi dua file - bundel browserified dan versi Minified. Tidak ada konten lain dari Dist/ Folder yang dijamin dengan cara apa pun selain file yang ditentukan sebagai "utama" di package.json
Suite tes yang termasuk dalam lib ini termasuk skrip kecil yang dieksekusi di browser tanpa kepala untuk memvalidasi paket yang dibundel. Pada saat penulisan ini, tampaknya tes ini tidak diputar dengan baik di subsistem Windows Linux.
Untuk alasan ini, tes browser dapat dinonaktifkan dengan keberadaan file bernama .Disable-test-browser
sudo apt-get install libfontconfig
Jika ada operasi sambungan yang mempengaruhi sel gabungan, kelompok penggabungan tidak akan dipindahkan dengan benar
Versi | Perubahan |
---|---|
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. Perubahan
|
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 |
|