DefinitelyTyped/types/exceljs/exceljs-tests.ts
segayuu 1a07f27101 [@types/Bluebird] Make iterative methods rigid types without type parameters. (#27216)
* Resolve bluebird(Array) method

* upgrade typescript version from bluebird-global

* move testfile
Reason: There are too many type definition files
  depending on jquery and it can not be managed.

* upgrade typescript version from bluebird require packages

* fix lint error: use-default-type-parameter
2018-07-12 09:23:46 -07:00

467 lines
13 KiB
TypeScript

import * as Excel from 'exceljs';
import * as stream from 'stream';
import * as fs from 'fs';
// most examples taken and adapted from README.md
const workbook = new Excel.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);
workbook.properties.date1904 = true;
workbook.views = [
{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}
];
const worksheet = workbook.addWorksheet('My Sheet');
workbook.eachSheet((worksheet, sheetId) => null);
const worksheet2 = workbook.getWorksheet('My Sheet');
const worksheet3 = workbook.getWorksheet(1);
const sheet1 = workbook.addWorksheet('My Sheet', {
pageSetup: { fitToPage: true, fitToHeight: 5, fitToWidth: 7 },
properties: { tabColor: { argb: 'FFC0000' } },
});
const sheet2 = workbook.addWorksheet('My Sheet', {
pageSetup: { paperSize: 9, orientation: 'landscape' },
views: [
{ state: 'frozen', xSplit: 1, ySplit: 1 },
{ state: 'normal', showGridLines: false },
{ state: 'split', activePane: 'bottomLeft', }
]
});
worksheet.properties.outlineLevelCol = 2;
worksheet.properties.defaultRowHeight = 15;
worksheet.pageSetup.margins = {
left: 0.7, right: 0.7,
top: 0.75, bottom: 0.75,
header: 0.3, footer: 0.3
};
worksheet.pageSetup.printArea = 'A1:G20';
worksheet.pageSetup.printTitlesRow = '1:3';
worksheet.views = [
{ state: 'frozen', xSplit: 2, ySplit: 3, topLeftCell: 'G10', activeCell: 'A1' },
{ state: 'split', xSplit: 2000, ySplit: 3000, topLeftCell: 'G10', activeCell: 'A1' },
];
worksheet.autoFilter = { from: 'A1', to: 'C1' };
worksheet.autoFilter = { from: { row: 3, column: 1 }, to: { row: 5, column: 12 } };
worksheet.autoFilter = { from: 'D3', to: { row: 7, column: 5 } };
worksheet.columns = [
{ header: 'Id', key: 'id', width: 10 },
{ header: 'Name', key: 'name', width: 32 },
{ header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
];
const idCol = worksheet.getColumn('id');
const nameCol = worksheet.getColumn('B');
const dobCol = worksheet.getColumn(3);
dobCol.header = 'Date of Birth';
dobCol.header = ['Date of Birth', 'A.K.A. D.O.B.'];
dobCol.key = 'dob';
dobCol.width = 15;
dobCol.hidden = true;
worksheet.getColumn(4).outlineLevel = 0;
const cl1 = worksheet.getColumn(4).collapsed;
dobCol.eachCell((cell, rowNumber) => null);
dobCol.eachCell({ includeEmpty: true }, (cell, rowNumber) => null);
worksheet.spliceColumns(3, 2);
const newCol3Values = [1, 2, 3, 4, 5];
const newCol4Values = ['one', 'two', 'three', 'four', 'five'];
worksheet.spliceColumns(3, 1, newCol3Values, newCol4Values);
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) });
worksheet.addRow([3, 'Sam', new Date()]);
const rowValues = [];
rowValues[1] = 4;
rowValues[5] = 'Kyle';
rowValues[9] = new Date();
worksheet.addRow(rowValues);
const rows = [
[5, 'Bob', new Date()],
{ id: 6, name: 'Barbara', dob: new Date() },
];
worksheet.addRows(rows);
const row = worksheet.getRow(5);
const row1 = worksheet.lastRow;
row.height = 42.5;
row.hidden = true;
worksheet.getRow(4).outlineLevel = 0;
worksheet.getRow(5).outlineLevel = 1;
worksheet.getRow(4).collapsed;
worksheet.getRow(4).number;
row.getCell(1).value = 5;
row.getCell('name').value = 'Zeb';
row.getCell('C').value = new Date();
const row2 = worksheet.getRow(4).values;
row.values = [1, 2, 3];
const values = [];
values[5] = 7;
values[10] = 'Hello, World!';
row.values = values;
row.values = { id: 13, name: 'Thing 1', dob: new Date() };
worksheet.eachRow((row, rowNumber) => null);
worksheet.eachRow({ includeEmpty: true }, (row, rowNumber) => null);
row.eachCell((cell, colNumber) => null);
row.eachCell({ includeEmpty: true }, (cell, colNumber) => null);
worksheet.spliceRows(4, 3);
const newRow3Values = [1, 2, 3, 4, 5];
const newRow4Values = ['one', 'two', 'three', 'four', 'five'];
worksheet.spliceRows(3, 1, newRow3Values, newRow4Values);
row.splice(3, 2);
row.splice(4, 1, 'new value 1', 'new value 2');
row.commit();
const rowSize = row.cellCount;
const numValues = row.actualCellCount;
worksheet.getCell('C3').value = new Date(1968, 5, 1);
const isDate = worksheet.getCell('C3').type === Excel.ValueType.Date;
worksheet.mergeCells('A4:B5');
worksheet.getCell('B5').value = 'Hello, World!';
const master = worksheet.getCell('B5').master === worksheet.getCell('A4');
worksheet.unMergeCells('A4');
worksheet.mergeCells('G10', 'H11');
worksheet.mergeCells(10, 11, 12, 13);
worksheet.getCell('A1').name = 'PI';
worksheet.getCell('A1').names = ['thing1', 'thing2'];
worksheet.getCell('A1').removeName('thing1');
worksheet.getCell('A1').dataValidation = {
type: 'list',
allowBlank: true,
formulae: ['"One,Two,Three,Four"']
};
worksheet.getCell('A1').dataValidation = {
type: 'list',
allowBlank: true,
formulae: ['$D$5:$F$5']
};
worksheet.getCell('A1').dataValidation = {
type: 'whole',
operator: 'notEqual',
showErrorMessage: true,
formulae: [5],
errorStyle: 'error',
errorTitle: 'Five',
error: 'The value must not be Five'
};
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'
};
worksheet.getCell('A1').dataValidation = {
type: 'textLength',
operator: 'lessThan',
showErrorMessage: true,
allowBlank: true,
formulae: [15]
};
worksheet.getCell('A1').dataValidation = {
type: 'date',
operator: 'lessThan',
showErrorMessage: true,
allowBlank: true,
formulae: [new Date(2016, 0, 1)]
};
worksheet.getCell('A1').value = null;
worksheet.getCell('A1').value = 5;
worksheet.getCell('A2').value = 3.14159;
worksheet.getCell('A1').value = 'Hello, World!';
worksheet.getCell('A1').value = new Date(2017, 2, 15);
worksheet.getCell('A1').value = { text: 'www.mylink.com', hyperlink: 'http://www.mylink.com' };
worksheet.getCell('A1').value = { text: 'Sheet2', hyperlink: '#\\"Sheet2\\"!A1' };
worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 };
worksheet.getCell('B3').value = { sharedFormula: 'A3', result: 10 };
worksheet.getCell('A1').value = true;
worksheet.getCell('A2').value = false;
worksheet.getCell('A1').value = { error: '#N/A' };
worksheet.getCell('A2').value = { error: '#VALUE!' };
worksheet.getCell('A1').value = {
richText: [
{ text: 'This is ' },
{ font: { italic: true }, text: 'italic' }
],
};
worksheet.getCell('A3').formula === 'A1+A2';
worksheet.getCell('A3').result === 7;
const isMaster = worksheet.getCell('A3').formulaType === Excel.FormulaType.Master;
const isShared = worksheet.getCell('B3').formulaType === Excel.FormulaType.Shared;
worksheet.getCell('A1').numFmt = '0.00%';
worksheet.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' } }
];
worksheet.getColumn(3).numFmt = '"£"#,##0.00;[Red]\-"£"#,##0.00';
worksheet.getRow(2).font = {
name: 'Comic Sans MS',
family: 4,
size: 16,
underline: 'double',
bold: true,
};
worksheet.getCell('A1').numFmt = '# ?/?';
worksheet.getCell('B1').numFmt = '0.00%';
worksheet.getCell('A1').font = {
name: 'Comic Sans MS',
family: 4,
size: 16,
underline: true,
bold: true
};
worksheet.getCell('A2').font = {
name: 'Arial Black',
color: { argb: 'FF00FF00' },
family: 2,
size: 14,
italic: true
};
const font = { name: 'Arial', size: 12 };
worksheet.getCell('A3').font = font;
font.size = 20;
worksheet.getCell('A1').alignment = { vertical: 'top', horizontal: 'left' };
worksheet.getCell('B1').alignment = { vertical: 'middle', horizontal: 'center' };
worksheet.getCell('C1').alignment = { vertical: 'bottom', horizontal: 'right' };
worksheet.getCell('D1').alignment = { wrapText: true };
worksheet.getCell('E1').alignment = { indent: 1 };
worksheet.getCell('F1').alignment = { textRotation: 30 };
worksheet.getCell('G1').alignment = { textRotation: -45 };
worksheet.getCell('H1').alignment = { textRotation: 'vertical' };
worksheet.getCell('A1').border = {
top: { style: 'thin' },
left: { style: 'thin' },
bottom: { style: 'thin' },
right: { style: 'thin' }
};
worksheet.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' } }
};
worksheet.getCell('A5').border = {
diagonal: { up: true, down: true, style: 'thick', color: { argb: 'FFFF0000' } }
};
worksheet.getCell('A1').fill = {
type: 'pattern',
pattern: 'darkVertical',
fgColor: { argb: 'FFFF0000' }
};
worksheet.getCell('A2').fill = {
type: 'pattern',
pattern: 'darkTrellis',
fgColor: { argb: 'FFFFFF00' },
bgColor: { argb: 'FF0000FF' }
};
worksheet.getCell('A3').fill = {
type: 'gradient',
gradient: 'angle',
degree: 0,
stops: [
{ position: 0, color: { argb: 'FF0000FF' } },
{ position: 0.5, color: { argb: 'FFFFFFFF' } },
{ position: 1, color: { argb: 'FF0000FF' } }
]
};
worksheet.getCell('A2').fill = {
type: 'gradient',
gradient: 'path',
center: { left: 0.5, top: 0.5 },
stops: [
{ position: 0, color: { argb: 'FFFF0000' } },
{ position: 1, color: { argb: 'FF00FF00' } }
]
};
worksheet.getCell('A1').value = {
richText: [
{
text: 'This is ',
font: { name: 'Calibri', size: 12, color: { theme: 0 }, family: 2, scheme: 'minor' },
},
{
text: 'a',
font: { italic: true, size: 12, color: { theme: 0 }, name: 'Calibri', scheme: 'minor' },
},
{
text: ' ',
font: { size: 12, color: { theme: 1 }, name: 'Calibri', family: 2, scheme: 'minor' },
},
{
text: 'colorful',
font: { size: 12, color: { argb: 'FFFF6600' }, name: 'Calibri', scheme: 'minor' },
},
{
text: ' text ',
font: { size: 12, color: { theme: 1 }, name: 'Calibri', family: 2, scheme: 'minor' },
},
{
text: 'with',
font: { size: 12, color: { argb: 'FFCCFFCC' }, name: 'Calibri', scheme: 'minor' },
},
{
text: ' in-cell ',
font: { size: 12, color: { theme: 1 }, name: 'Calibri', family: 2, scheme: 'minor' },
},
{
text: 'format',
font: { bold: true, size: 12, name: 'Calibri', family: 2, scheme: 'minor' },
}
]
};
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;
worksheet.properties.outlineLevelCol = 1;
worksheet.properties.outlineLevelRow = 1;
const imageId1 = workbook.addImage({
filename: 'path/to/image.jpg',
extension: 'jpeg',
});
const imageId2 = workbook.addImage({
buffer: fs.readFileSync('path/to.image.png'),
extension: 'png',
});
worksheet.addBackgroundImage(imageId1);
worksheet.addImage(imageId2, 'B2:D6');
worksheet.addImage(imageId2, {
tl: { col: 1.5, row: 1.5 },
br: { col: 3.5, row: 5.5 }
});
workbook.xlsx.readFile('./1.xlsx').then(() => null);
(new stream.Stream()).pipe(workbook.xlsx.createInputStream());
workbook.xlsx.writeFile('./1.xlsx').then(() => null);
workbook.xlsx.write(new stream.Stream()).then(() => null);
workbook.csv.readFile('./1.xlsx').then(worksheet => null);
workbook.csv.read(new stream.Stream()).then(worksheet => null);
(new stream.Stream()).pipe(workbook.csv.createInputStream());
const options1 = { dateFormats: ['DD/MM/YYYY'] };
workbook.csv.readFile('./1.xlsx', options1).then(worksheet => null);
const options2 = {
map(value: any, index: number) {
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);
}
}
};
workbook.csv.readFile('./1.xlsx', options2).then(worksheet => null);
workbook.csv.writeFile('./1.xlsx').then(() => null);
// write to a stream
workbook.csv.write(new stream.Stream()).then(() => null);
const workbookWriter = new Excel.stream.xlsx.WorkbookWriter({
filename: './streamed-workbook.xlsx',
useStyles: true,
useSharedStrings: true
});
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();
worksheet.commit();
workbook.commit().then(() => null);
Excel.config.setValue('promise', Promise);