通过 JavaScript 通过 C++ 使用 IFilePathProvider 接口提供导出的工作表 HTML 文件路径
Contents
[
Hide
]
可能的使用场景
假设你有一个包含多个工作表的 Excel 文件,且你希望每个工作表导出为单独的 HTML 文件。如果某些工作表有指向其他工作表的链接,那么这些链接在导出的 HTML 中会断裂。为了解决此问题,Aspose.Cells for JavaScript 通过 C++ 提供了 IFilePathProvider 接口,你可以实现此接口以修复断裂的链接。
通过IFilePathProvider接口提供导出的工作表HTML文件路径
请下载在以下代码中使用的示例Excel文件及其导出的HTML文件。所有文件都在Temp目录中。你应将其解压到C盘,然后变成C:\Temp目录。然后在浏览器中打开Sheet1.html文件,点击其中的两个链接。这些链接指向C:\Temp\OtherSheets目录中的两个已导出HTML工作表。
file:///C:/Temp/OtherSheets/Sheet2.html#RANGE!A1
file:///C:/Temp/OtherSheets/Sheet3.html#RANGE!A1
以下截图显示了C:\Temp\Sheet1.html及其链接的外观

以下截图显示了 HTML 源代码。如你所见,链接现在引用的是 C:\Temp\OtherSheets 目录。这是通过实现 IFilePathProvider 接口实现的。

示例代码
请注意,C:\Temp目录仅为说明用途。你可以使用任何自定义目录,把示例Excel文件放在里面,然后执行提供的示例代码。它将在你的目录中创建一个OtherSheets子目录,并在里面导出第二和第三个工作表的HTML。请在执行前修改代码中的dirPath变量,指向你选择的目录。
示例代码只有在设置了Aspose.Cells许可证后才有效。如果你在未设置许可证的情况下运行代码,会进入无限循环。因此,我们添加了一个检查,以在未设置许可证时打印消息并停止执行。你可以购买许可证或向Aspose.Purchase团队请求30天临时许可证。
请注意,注释掉代码中的这些行将会破坏Sheet1.html中的链接,导致点击后无法打开Sheet2.html或Sheet3.html。
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Export Worksheet to HTML with FilePathProvider Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, HtmlSaveOptions } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
// Implementation of IFilePathProvider for browser
class FilePathProvider extends AsposeCells.IFilePathProvider {
constructor() {
super();
}
// Converted method name from getFullName -> fullName per universal getter/setter conversion rule
fullName(sheetName) {
if (sheetName === "Sheet2") {
return "file:///OtherSheets/Sheet2.html";
} else if (sheetName === "Sheet3") {
return "file:///OtherSheets/Sheet3.html";
}
return "";
}
}
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiate Workbook from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Create HtmlSaveOptions and assign FilePathProvider (converted setter to property assignment)
const options = new HtmlSaveOptions();
options.filePathProvider = new FilePathProvider();
// Save workbook to HTML using options
const outputData = workbook.save(SaveFormat.Html, options);
const blob = new Blob([outputData], { type: 'text/html' });
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output.html';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download HTML File';
resultDiv.innerHTML = '<p style="color: green;">HTML exported successfully! Click the download link to get the result.</p>';
});
</script>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - IFilePathProvider</title>
</head>
<body>
<h1>Aspose.Cells IFilePathProvider Example (Browser)</h1>
<p>Select the Sample_filepath.xlsx file to export worksheets to separate HTML files.</p>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
<div id="links"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, HtmlSaveOptions, Utils } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
// Implementation of IFilePathProvider interface for browser
class FilePathProvider extends AsposeCells.IFilePathProvider {
constructor() {
super();
}
// Gets the full path of the file by worksheet name when exporting worksheet to html separately.
// So the references among the worksheets could be exported correctly.
getFullName(sheetName) {
if (sheetName === "Sheet2") {
return "file:///OtherSheets/Sheet2.html";
} else if (sheetName === "Sheet3") {
return "file:///OtherSheets/Sheet3.html";
}
return "";
}
}
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
const linksDiv = document.getElementById('links');
linksDiv.innerHTML = '';
resultDiv.innerHTML = '';
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select the Sample_filepath.xlsx file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiate workbook from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Check license
if (!workbook.isLicensed()) {
resultDiv.innerHTML = '<p style="color: red;">You must set the license to execute this code successfully.</p>';
return;
}
// Export each worksheet to separate HTML using HtmlSaveOptions and FilePathProvider
const sheetCount = workbook.worksheets.count;
for (let i = 0; i < sheetCount; i++) {
// Set the active worksheet to current index
workbook.worksheets.activeSheetIndex = i;
// Create html save option
const options = new HtmlSaveOptions();
options.exportActiveWorksheetOnly = true;
// Provide file path provider so hyperlinks among sheets are preserved correctly
options.filePathProvider = new FilePathProvider();
// Save the active worksheet to HTML (returns Uint8Array)
const outputData = workbook.save(SaveFormat.Html, options);
// Create downloadable blob for the HTML
const blob = new Blob([outputData], { type: 'text/html' });
// Determine filename similar to original logic
const sheetIndex = i + 1;
let filename = '';
if (i === 0) {
filename = 'Sheet1.html';
} else {
filename = `OtherSheets_Sheet${sheetIndex}_out.html`;
}
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = filename;
link.textContent = 'Download ' + filename;
link.style.display = 'block';
linksDiv.appendChild(link);
}
resultDiv.innerHTML = '<p style="color: green;">Worksheets exported successfully! Use the links below to download each HTML file.</p>';
});
</script>
</html>