我正在尝试将数据从 DataSet 传输到 Excel 工作簿。不幸的是,我需要比通过 ADO.NET 简单地链接到 Excel 并使用标准 SQL 选择和插入数据所能获得的更多控制,所以我使用 excel interop。
我的原始算法涉及遍历数据集的所有表/行/项目并单独设置 Formula
Excel 中的每个单元格。这行得通,但传输所有数据需要将近半分钟。
我决定尝试不同的解决方案:将每个表转换为制表符分隔的字符串(使用 StringBuilder
和 string.Join()
的组合,将字符串复制到剪贴板,并使用互操作调用粘贴命令Excel Worksheet
对象。
这也行得通,时间缩短了 50% 多一点,但我对使用剪贴板传输数据有点偏执。如果用户在传输过程中开始执行涉及剪贴板的其他操作,会发生什么情况?我还想知道如果我可以直接粘贴字符串而不是必须使用剪贴板作为中介是否会更快。
所以,这就是我的问题...是否有一些可用的命令允许我直接从 C# 字符串在 Excel 中一次性“粘贴”数据 block ,而无需使用剪贴板?强>
最佳答案
创建一个与目标范围具有相同维度的二维对象数组(第一个数组索引是行数;第二个是列数)。然后使用该数组设置范围的值属性。
例子:
void SetRange(Worksheet worksheet, DataSet dataSet)
{
object[] values = GetValuesFromDataSet(dataSet);
int rowCount = values.GetUpperBound(0);
int columnCount = values.GetUpperBound(1);
Range range = worksheet.Range(worksheet.Cells(1, 1), worksheetCells.(rowCount, columnCount));
range.Value = values;
}
关于c# - 您可以使用不使用剪贴板的 Excel Interop 一次粘贴一个单元格 block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572168/