c# - 将文本放在所有 Excel 工作表的标题中(循环:foreach、for) - 低性能(C#)
问题描述
我想将文本插入到 Excel 中每个工作表的标题中。不幸的是,这需要很长时间。我尝试了两个循环:foreach 和 for。下面是我与秒表一起使用的简单代码。看起来 Excel 需要大约 0.7 秒来处理一张纸。即使循环中有一张纸,也需要 0.5 秒。打开的床单越多,每个人的循环时间就越长。当然,一张纸的情况只是为了描绘这种情况。10 张纸需要 7.5 秒,每次用户保存工作簿时我都需要这样做。启用自动保存选项后,这可能具有挑战性。
我相信还有另一种可能性,但我找不到任何解决方案。我读到了编组,但是 7,5 秒?也许有诸如快速内置多次插入之类的东西,比如 AllSheets.PageSetup.LeftHeader?
你能分享你在这个话题上的经验吗?
//aWb is an Active WorkBook
Stopwatch sw = new Stopwatch();
sw.Start();
foreach (Excel.Worksheet ew in aWb.Worksheets) //7:541 for 10 sheets
{
ew.PageSetup.LeftHeader = "LeftHeader";
}
sw.Stop();
MessageBox.Show("Foreach: " + sw.Elapsed.Seconds + ":" + sw.Elapsed.Milliseconds);
sw.Reset();
sw.Start();
for (int x = 1; x <= Application.Sheets.Count; x++) //7:318 for 10 sheets
{
aWb.Sheets[x].PageSetup.LeftHeader = "LeftHeader";
}
sw.Stop();
MessageBox.Show("For: " + sw.Elapsed.Seconds + ":" + sw.Elapsed.Milliseconds);
解决方案
首先,我建议关闭以下属性以提高整体性能:
- Application.ScreenUpdating - 关闭屏幕更新以加快您的宏代码。您将无法看到宏在做什么,但它会运行得更快。请记住在宏结束时将 ScreenUpdating 属性设置回 True。
- Worksheet.EnableCalculation - 如果 Microsoft Excel 在必要时自动重新计算工作表,则为真。如果 Excel 不重新计算工作表,则为 False。当此属性的值为 False 时,您不能请求重新计算。当您将值从 False 更改为 True 时,Excel 会重新计算工作表。
- Application.Calculation - 返回或设置表示计算模式的 XlCalculation 值。
另外,我建议使用Open XML SDK,有时在没有 Excel 自动化的情况下完成工作要快得多。
推荐阅读
- javascript - 如何从 Node.js 中的 Promise 和 async / await 函数返回值
- sql-server - 标识 INT 列已达到 SQL Server 中的最大限制
- python - 在 Python 中提取嵌套的 json/list
- gcc - 如何使用特定的 gcc 版本构建 glib 库
- php - 如何在名称位于会话变量上的视图上显示图像?
- wix - `
` 不起作用 - c# - Windows 中的 setid 等价物?
- javascript - 动态返回配置值(node.js)
- javascript - 如何在javascript中格式化正则表达式
- c# - 向右旋转木马标题