用 JavaScript 通过 C++ 处理线程化评论
线程化的批注
MS Excel 365提供了一个添加分线评论的功能。这些评论可以用作对话,并可用于讨论。现在的评论带有一个回复框,允许进行分线对话。Excel 365中的旧注释称为注释。下面的截图显示了在Excel中打开分线评论时的显示方式。

在较旧版本的Excel中,分线评论显示如下。以下图片是打开在Excel 2016中的样本文件时拍摄的。


Aspose.Cells还提供了管理分线评论的功能。
添加分线评论
使用Excel添加分线评论
在Excel 365中添加分线评论,请按照以下步骤进行。
- 方法1
- 单击审阅选项卡
- 单击新建评论按钮
- 这将打开一个对话框,以输入活动单元格中的评论。

- 方法2
- 右键单击要插入评论的单元格。
- 单击新建评论选项。
- 这将打开一个对话框,以输入活动单元格中的评论。
使用Aspose.Cells添加分线评论
Aspose.Cells 提供 Comments.AddThreadedComment 方法以添加线程评论。Comments.AddThreadedComment 方法接受以下三个参数。
- 单元格名称:要插入评论的单元格的名称。
- 评论文本:评论的文本。
- ThreadedCommentAuthor:评论的作者
以下代码示例演示了如何使用 Comments.AddThreadedComment 方法向单元格 A1 添加嵌套评论。请参考由代码生成的 输出 Excel 文件。
示例代码
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - Add Threaded Comment</title>
</head>
<body>
<h1>Add Threaded Comment 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 } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
// Create a new workbook
const workbook = new Workbook();
// Add Author
const authorIndex = workbook.worksheets.threadedCommentAuthors.add("Aspose Test", "", "");
const author = workbook.worksheets.threadedCommentAuthors.get(authorIndex);
// Add Threaded Comment to cell A1 in the first worksheet
const worksheet = workbook.worksheets.get(0);
worksheet.comments.addThreadedComment("A1", "Test Threaded Comment", author);
// Save the modified workbook and provide download link
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'AddThreadedComments_out.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Excel File';
document.getElementById('result').innerHTML = '<p style="color: green;">Threaded comment added successfully! Click the download link to get the file.</p>';
});
</script>
</html>
读取分线评论
使用Excel读取分线评论
要在Excel中读取分线评论,只需将鼠标悬停在包含评论的单元格上以查看评论。评论视图将类似于以下图像中的视图。

使用Aspose.Cells读取分线评论
Aspose.Cells提供Comments.threadedComments方法来检索指定列的分线评论。Comments.threadedComments方法接受列名称作为参数,并返回ThreadedCommentCollection。您可以遍历ThreadedCommentCollection以查看评论。
以下示例演示了通过加载 示例Excel文件 从A1列读取评论。请查看生成的代码控制台输出以供参考。
示例代码
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Threaded Comments Example</title>
</head>
<body>
<h1>Threaded Comments 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, Worksheet, Cell } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
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();
// Instantiating a Workbook object from uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Access first worksheet
const worksheet = workbook.worksheets.get(0);
// Get Threaded Comments for cell A1
const threadedComments = worksheet.comments.threadedComments("A1");
const count = threadedComments.count;
let html = '<h2>Threaded Comments</h2>';
if (count === 0) {
html += '<p>No threaded comments found for A1.</p>';
} else {
html += '<ul>';
for (let i = 0; i < count; i++) {
const comment = threadedComments.get(i);
const notes = comment.notes;
const authorName = comment.author.name;
html += `<li><strong>Author:</strong> ${authorName} <br/><strong>Comment:</strong> ${notes}</li>`;
}
html += '</ul>';
}
resultDiv.innerHTML = html;
});
</script>
</html>
控制台输出
Comment: Test Threaded Comment
Author: Aspose Test
读取线程评论的创建时间
Aspose.Cells 提供 Comments.threadedComments 方法以检索指定列的嵌套评论。Comments.threadedComments 方法接受列名作为参数并返回 ThreadedCommentCollection。你可以遍历 ThreadedCommentCollection ,并使用 ThreadedComment.createdTime 属性。
以下示例演示了通过加载 示例Excel文件 读取线程评论的创建时间。请查看生成的代码控制台输出以供参考。
示例代码
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Threaded Comments Example</title>
</head>
<body>
<h1>Threaded Comments 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, Worksheet, Cell } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
const downloadLink = document.getElementById('downloadLink');
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
// No try-catch: allow errors to propagate for testing
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Loads the workbook from the uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Access first worksheet
const worksheet = workbook.worksheets.get(0);
// Get Threaded Comments for cell A1
const threadedComments = worksheet.comments.threadedComments("A1");
const count = threadedComments.count;
let html = '<h2>Threaded Comments (Cell A1)</h2>';
if (count === 0) {
html += '<p>No threaded comments found in cell A1.</p>';
} else {
html += '<ul>';
for (let i = 0; i < count; i++) {
const comment = threadedComments.get(i);
const notes = comment.notes;
const authorName = comment.author.name;
const createdTime = comment.createdTime;
console.log("Comment: " + notes);
console.log("Author: " + authorName);
console.log("Created Time: " + createdTime);
html += `<li><strong>Author:</strong> ${authorName} <br/><strong>Created:</strong> ${createdTime} <br/><strong>Comment:</strong> ${notes}</li>`;
}
html += '</ul>';
}
resultDiv.innerHTML = html;
// No file modifications or save in this example; hide download link
downloadLink.style.display = 'none';
});
</script>
</html>
控制台输出
Comment: Test Threaded Comment
Author: Aspose Test
Created Time: 5/15/2019 12:46:23 PM
编辑线程评论
使用Excel编辑线程评论
要在Excel中编辑线程评论,请单击评论上显示的编辑链接,如下图所示。

使用Aspose.Cells编辑线程评论
Aspose.Cells 提供 Comments.threadedComments 方法以检索指定列的嵌套评论。Comments.threadedComments 方法接受列名作为参数并返回 ThreadedCommentCollection。你可以在 ThreadedCommentCollection 中更新所需的评论并保存工作簿。
以下示例演示如何加载样例 Excel 文件并编辑第一条线程化评论(在 A1 列),生成更新后的评论以供参考,详见输出的 Excel 文件。
示例代码
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Edit Threaded Comments 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 } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
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();
// Instantiating a Workbook object by opening the Excel file from the file input
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Access first worksheet
const worksheet = workbook.worksheets.get(0);
// Get Threaded Comment from cell A1
const comment = worksheet.comments.threadedComments("A1").get(0);
// Update the threaded comment notes
comment.notes = "Updated Comment";
// Save the modified Excel file
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'EditThreadedComments.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Edited Excel File';
resultDiv.innerHTML = '<p style="color: green;">Threaded comment updated successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
删除线程评论
使用Excel删除线程评论
要在Excel中删除线程评论,请右键单击包含评论的单元格,然后单击下图所示的删除评论选项。
