98 lines
3.0 KiB
JavaScript
98 lines
3.0 KiB
JavaScript
|
/** @odoo-module */
|
||
|
|
||
|
import * as spreadsheet from "@odoo/o-spreadsheet";
|
||
|
import { range } from "@web/core/utils/numbers";
|
||
|
|
||
|
const { toCartesian, toZone } = spreadsheet.helpers;
|
||
|
|
||
|
/**
|
||
|
* Get the value of the given cell
|
||
|
*/
|
||
|
export function getCellValue(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { col, row } = toCartesian(xc);
|
||
|
const cell = model.getters.getEvaluatedCell({ sheetId, col, row });
|
||
|
return cell.value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the cell of the given xc
|
||
|
*/
|
||
|
export function getCell(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { col, row } = toCartesian(xc);
|
||
|
return model.getters.getCell({ sheetId, col, row });
|
||
|
}
|
||
|
|
||
|
export function getEvaluatedCell(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { col, row } = toCartesian(xc);
|
||
|
return model.getters.getEvaluatedCell({ sheetId, col, row });
|
||
|
}
|
||
|
|
||
|
export function getEvaluatedGrid(model, zoneXc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { top, bottom, left, right } = toZone(zoneXc);
|
||
|
const grid = [];
|
||
|
for (const row of range(top, bottom + 1)) {
|
||
|
grid.push([]);
|
||
|
for (const col of range(left, right + 1)) {
|
||
|
const cell = model.getters.getEvaluatedCell({ sheetId, col, row });
|
||
|
grid[row][col] = cell.value;
|
||
|
}
|
||
|
}
|
||
|
return grid;
|
||
|
}
|
||
|
|
||
|
export function getEvaluatedFormatGrid(model, zoneXc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { top, bottom, left, right } = toZone(zoneXc);
|
||
|
const grid = [];
|
||
|
for (const row of range(top, bottom + 1)) {
|
||
|
grid.push([]);
|
||
|
for (const col of range(left, right + 1)) {
|
||
|
const cell = model.getters.getEvaluatedCell({ sheetId, col, row });
|
||
|
grid[row][col] = cell.format;
|
||
|
}
|
||
|
}
|
||
|
return grid;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the cells of the given sheet (or active sheet if not provided)
|
||
|
*/
|
||
|
export function getCells(model, sheetId = model.getters.getActiveSheetId()) {
|
||
|
return model.getters.getCells(sheetId);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the formula of the given xc
|
||
|
*/
|
||
|
export function getCellFormula(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const cell = getCell(model, xc, sheetId);
|
||
|
return cell && cell.isFormula ? cell.content : "";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the content of the given xc
|
||
|
*/
|
||
|
export function getCellContent(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { col, row } = toCartesian(xc);
|
||
|
return model.getters.getCellText({ sheetId, col, row }, true);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the list of the merges (["A1:A2"]) of the sheet
|
||
|
*/
|
||
|
export function getMerges(model, sheetId = model.getters.getActiveSheetId()) {
|
||
|
return model.exportData().sheets.find((sheet) => sheet.id === sheetId).merges;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the borders at the given XC
|
||
|
*/
|
||
|
export function getBorders(model, xc, sheetId = model.getters.getActiveSheetId()) {
|
||
|
const { col, row } = toCartesian(xc);
|
||
|
const borders = model.getters.getCellBorder({ sheetId, col, row });
|
||
|
if (!borders) {
|
||
|
return null;
|
||
|
}
|
||
|
Object.keys(borders).forEach((key) => borders[key] === undefined && delete borders[key]);
|
||
|
return borders;
|
||
|
}
|