UNPKG

read-excel-file

Version:

Read `.xlsx` files in a web browser or in Node.js

106 lines (104 loc) 3.7 kB
import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName } from './dom.js'; // Returns an array of cells, // each element being an XML DOM element representing a cell. export function getCellElements(document) { var worksheet = document.documentElement; var sheetData = findChild(worksheet, 'sheetData'); var cells = []; forEach(sheetData, 'row', function (row) { forEach(row, 'c', function (cell) { cells.push(cell); }); }); return cells; } export function getMergedCellCoordinates(document) { var worksheet = document.documentElement; var mergedCells = findChild(worksheet, 'mergeCells'); var mergedCellsInfo = []; if (mergedCells) { forEach(mergedCells, 'mergeCell', function (mergedCell) { mergedCellsInfo.push(mergedCell.getAttribute('ref')); }); } return mergedCellsInfo; } export function getCellValueElement(document, element) { return findChild(element, 'v'); } export function getCellInlineStringValue(document, element) { // It seems as if in some weirdly-output "*.xlsx" files // there're non-element nodes of some weird nature. // https://gitlab.com/catamphetamine/read-excel-file/-/issues/109 // This code filters out such weird non-element nodes. var firstElementChild = getFirstElementChild(element); if (firstElementChild && getTagName(firstElementChild) === 'is') { var firstElementChildFirstElementChild = getFirstElementChild(firstElementChild); if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') { return firstElementChildFirstElementChild.textContent; } } } export function getDimensions(document) { var worksheet = document.documentElement; var dimensions = findChild(worksheet, 'dimension'); if (dimensions) { return dimensions.getAttribute('ref'); } } export function getBaseStyles(document) { var styleSheet = document.documentElement; var cellStyleXfs = findChild(styleSheet, 'cellStyleXfs'); if (cellStyleXfs) { return findChildren(cellStyleXfs, 'xf'); } return []; } export function getCellStyles(document) { var styleSheet = document.documentElement; var cellXfs = findChild(styleSheet, 'cellXfs'); if (!cellXfs) { return []; } return findChildren(cellXfs, 'xf'); } export function getNumberFormats(document) { var styleSheet = document.documentElement; var numberFormats = []; var numFmts = findChild(styleSheet, 'numFmts'); if (numFmts) { return findChildren(numFmts, 'numFmt'); } return []; } export function getSharedStrings(document) { // An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` ("rich formatting") elements having `<t/>`. // https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1 // http://www.datypic.com/sc/ooxml/e-ssml_si-1.html var sst = document.documentElement; return map(sst, 'si', function (string) { var t = findChild(string, 't'); if (t) { return t.textContent; } var value = ''; forEach(string, 'r', function (r) { value += findChild(r, 't').textContent; }); return value; }); } export function getWorkbookProperties(document) { var workbook = document.documentElement; return findChild(workbook, 'workbookPr'); } export function getRelationships(document) { var relationships = document.documentElement; return findChildren(relationships, 'Relationship'); } export function getSheets(document) { var workbook = document.documentElement; var sheets = findChild(workbook, 'sheets'); return findChildren(sheets, 'sheet'); } //# sourceMappingURL=xlsx.js.map