我正在尝试将 Excel 中的选定范围导入到我的 Web 应用程序(带有 JavaScript 的 JSF)。
我已经能够通过文件上传导入整个 Excel 文件,我还可以复制 Excel 文件的内容,将其粘贴到某种文本输入中并随后解析它,但我真的很希望在一个 excel 时具有这种行为使用另一个选定范围。
我知道这可能是不可能的,因为出于很好的原因,浏览器的运行时与客户端(运行 Excel)是分开的。尽管如此,我只是想检查是否有一个好主意,但我在网络搜索中没有找到。
Excel范围选择:
您可以使用 insertWorkbookFromBase64 API 从另一个工作簿复制工作表。然后您可以通过API调用删除其他不相关的内容。
以下是示例代码供您参考。
async function run() {
await Excel.run(async (context) => {
//Excel.InsertWorksheetOptions
var workbook = context.workbook;
var options = {
sheetNamesToInsert: ["sample"],
positionType: Excel.WorksheetPositionType.end,
relativeTo: "Sheet1"
};
const sheets = context.workbook.worksheets;
sheets.addFromBase64(
workbookContents,
null, // get all the worksheets
Excel.WorksheetPositionType.end // insert them after the current workbook's worksheets
);
await context.sync();
});
}
async function getFileBase64() {
const myFile = <HTMLInputElement>document.getElementById("file");
const reader = new FileReader();
reader.onload = (event) => {
// strip off the metadata before the base64-encoded string
const startIndex = reader.result.toString().indexOf("base64,");
workbookContents = reader.result.toString().substr(startIndex + 7);
};
// read in the file as a data URL so we can parse the base64-encoded string
reader.readAsDataURL(myFile.files[0]);
}
async function insertWorksheetsFromBase64(workbookContents) {
Excel.run((context) => {
//Excel.InsertWorksheetOptions
var options = { sheetNamesToInsert: [], positionType: Excel.WorksheetPositionType.before, relativeTo: "Sheet2" };
const sheets = context.workbook.insertWorksheetsFromBase64(workbookContents);
return context.sync();
});
}