同时读取多个线程中的单元格值
Contents
[
Hide
]
需要同时在多个线程中读取单元格值是一个常见的需求。本文解释了如何使用Aspose.Cells来实现这一目的。
为了在多个线程中同时读取单元格值,请将Cells.multiThreadReading(boolean)设置为true。否则,可能会得到错误的单元格值。
以下代码:
- 创建一个工作簿。
- 添加一个工作表。
- 用字符串值填充工作表。
- 然后创建两个同时从随机单元格中读取值的线程。 如果读取的值是正确的,则不会发生任何事情。如果读取的值不正确,则会显示一条消息。
如果您注释掉这一行:
testWorkbook.worksheets.get(0).cells.multiThreadReading(true);
那么将显示以下消息:
if (s !== "R" + row + "C" + col)
{
console.log("This message box will show up when cells read values are incorrect.");
}
否则,程序将在不显示任何消息的情况下运行,这意味着从单元格中读取的所有值都是正确的。
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Multi-Threading Read 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;
const readyPromise = AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
let testWorkbook;
const threadLoop = () => {
const random = Math.random;
while (true) {
const row = Math.floor(random() * 10000);
const col = Math.floor(random() * 100);
const s = testWorkbook.worksheets.get(0).cells.get(row, col).stringValue;
if (s !== "R" + row + "C" + col) {
console.log("This message will show up when cells read values are incorrect.");
}
}
};
const testMultiThreadingRead = () => {
testWorkbook = new Workbook();
testWorkbook.worksheets.clear();
testWorkbook.worksheets.add("Sheet1");
for (let row = 0; row < 10000; row++) {
for (let col = 0; col < 100; col++) {
testWorkbook.worksheets.get(0).cells.get(row, col).value = "R" + row + "C" + col;
}
}
// Uncommenting this line will enable multi-threaded reading
//testWorkbook.worksheets.get(0).cells.setMultiThreadReading(true);
const myThread1 = setInterval(threadLoop, 0);
const myThread2 = setInterval(threadLoop, 0);
setTimeout(() => {
clearInterval(myThread1);
clearInterval(myThread2);
document.getElementById('result').innerHTML = '<p style="color: green;">Multi-threading read test completed.</p>';
}, 5 * 1000);
};
document.getElementById('runExample').addEventListener('click', async () => {
await readyPromise;
document.getElementById('result').innerHTML = '<p style="color: green;">Starting multi-threading read test. This will run for 5 seconds.</p>';
testMultiThreadingRead();
});
</script>
</html>