mirror of
https://github.com/canna71/obsidian-sheets.git
synced 2026-07-22 08:30:27 +00:00
basic loading
This commit is contained in:
parent
44aa707d3a
commit
fff586950b
4 changed files with 1459 additions and 71 deletions
1466
package-lock.json
generated
1466
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -29,6 +29,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"esbuild-plugin-less": "^1.2.1",
|
||||
"exceljs": "^4.3.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
// import * as React from "react";
|
||||
// import { createRoot } from "react-dom/client";
|
||||
// https://github.com/exceljs/exceljs#reading-xlsx
|
||||
import {
|
||||
MarkdownPostProcessorContext,
|
||||
MarkdownView,
|
||||
|
|
@ -16,7 +17,9 @@ import Spreadsheet from "x-data-spreadsheet";
|
|||
// import * as path from "path"
|
||||
|
||||
import * as XLSX from "xlsx";
|
||||
import * as ExcelJS from "exceljs";
|
||||
import { stox, xtos } from "../utils/xlsxpread";
|
||||
import { toSpreadsheet } from "src/utils/excelConverter";
|
||||
|
||||
const saveIcon =
|
||||
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc3MTc3MDkyOTg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2NzgiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIxMy4zMzMzMzMgMTI4aDU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMgODUuMzMzMzMzdjU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMgODUuMzMzMzMzSDIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMtODUuMzMzMzMzVjIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMtODUuMzMzMzMzeiBtMzY2LjkzMzMzNCAxMjhoMzQuMTMzMzMzYTI1LjYgMjUuNiAwIDAgMSAyNS42IDI1LjZ2MTE5LjQ2NjY2N2EyNS42IDI1LjYgMCAwIDEtMjUuNiAyNS42aC0zNC4xMzMzMzNhMjUuNiAyNS42IDAgMCAxLTI1LjYtMjUuNlYyODEuNmEyNS42IDI1LjYgMCAwIDEgMjUuNi0yNS42ek0yMTMuMzMzMzMzIDIxMy4zMzMzMzN2NTk3LjMzMzMzNGg1OTcuMzMzMzM0VjIxMy4zMzMzMzNIMjEzLjMzMzMzM3ogbTEyOCAwdjI1NmgzNDEuMzMzMzM0VjIxMy4zMzMzMzNoODUuMzMzMzMzdjI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjcgNDIuNjY2NjY3SDI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjctNDIuNjY2NjY3VjIxMy4zMzMzMzNoODUuMzMzMzMzek0yNTYgMjEzLjMzMzMzM2g4NS4zMzMzMzMtODUuMzMzMzMzeiBtNDI2LjY2NjY2NyAwaDg1LjMzMzMzMy04NS4zMzMzMzN6IG0wIDU5Ny4zMzMzMzR2LTEyOEgzNDEuMzMzMzMzdjEyOEgyNTZ2LTE3MC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjctNDIuNjY2NjY3aDQyNi42NjY2NjZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjcgNDIuNjY2NjY3djE3MC42NjY2NjdoLTg1LjMzMzMzM3ogbTg1LjMzMzMzMyAwaC04NS4zMzMzMzMgODUuMzMzMzMzek0zNDEuMzMzMzMzIDgxMC42NjY2NjdIMjU2aDg1LjMzMzMzM3oiIHAtaWQ9IjI2NzkiIGZpbGw9IiMyYzJjMmMiPjwvcGF0aD48L3N2Zz4=";
|
||||
|
|
@ -161,12 +164,18 @@ export function processCodeBlock(
|
|||
cellStyles: true,
|
||||
sheetStubs: true // >
|
||||
});
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
|
||||
const excelWorkbook = await workbook.xlsx.load(fileContent)
|
||||
|
||||
const data2 = toSpreadsheet(excelWorkbook);
|
||||
|
||||
|
||||
const data = stox(xlsx);
|
||||
(ctx as any).spreadsheet = createSpreadSheet(
|
||||
container,
|
||||
spreadsheet_options,
|
||||
{ ...options, data },
|
||||
{ ...options, data: data2 },
|
||||
ctx
|
||||
);
|
||||
// .loadData();
|
||||
|
|
|
|||
52
src/utils/excelConverter.ts
Normal file
52
src/utils/excelConverter.ts
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import { Workbook } from "exceljs";
|
||||
|
||||
export function toSpreadsheet(wb: Workbook) {
|
||||
const out = wb.worksheets.map(ws=>{
|
||||
const ows = {
|
||||
name: ws.name,
|
||||
rows: {} as any,
|
||||
merges: [] as string[],
|
||||
styles: [] as any[],
|
||||
// freezes:
|
||||
}
|
||||
ws.eachRow((row, rowNumber)=>{
|
||||
const rowId = String(row.number-1)
|
||||
const rowob:any = {
|
||||
cells: {}
|
||||
};
|
||||
ows.rows[rowId] = rowob;
|
||||
const cells = row.eachCell((cell,cellNumber)=>{
|
||||
const cellOb = {
|
||||
text: cell.text,
|
||||
merge: [] as number[]
|
||||
}
|
||||
if(cell.formula) cellOb.text = "=" + cell.formula;
|
||||
if(!cell.isMerged || !cell.model.master){
|
||||
rowob.cells[Number(cell.col)-1] = cellOb;
|
||||
if(cell.isMerged){
|
||||
const merge = (ws as any)._merges[cell.address];
|
||||
// console.log(merge);
|
||||
cellOb.merge = [
|
||||
merge.bottom-merge.top as number,
|
||||
merge.right-merge.left as number
|
||||
]
|
||||
}
|
||||
} else {
|
||||
//
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
// merges
|
||||
const merges = [];
|
||||
for(let m in (ws as any)._merges){
|
||||
const merge = (ws as any)._merges[m];
|
||||
const range = merge.range
|
||||
merges.push(range);
|
||||
}
|
||||
ows.merges = merges;
|
||||
return ows;
|
||||
});
|
||||
|
||||
return out;
|
||||
}
|
||||
Loading…
Reference in a new issue