c# - 您可以使用不使用剪贴板的 Excel Interop 一次粘贴一个单元格 block 吗?

标签 c# excel office-interop excel-interop vba

我正在尝试将数据从 DataSet 传输到 Excel 工作簿。不幸的是,我需要比通过 ADO.NET 简单地链接到 Excel 并使用标准 SQL 选择和插入数据所能获得的更多控制,所以我使用 excel interop。

我的原始算法涉及遍历数据集的所有表/行/项目并单独设置 Formula Excel 中的每个单元格。这行得通,但传输所有数据需要将近半分钟。

我决定尝试不同的解决方案:将每个表转换为制表符分隔的字符串(使用 StringBuilderstring.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/

相关文章:

c# - 从类型名称动态创建委托(delegate)

excel - 复制相关数据验证规则

excel - VB Excel 忽略范围内的空单元格

c# - 从 Word 获取特定页面

c# - 使用 Excel Interop 时,忽略 Excel 中设置的日期格式

c# - 如何构建 C# 控制台应用程序以高效使用 IDisposable 数据库资源?

c# - 转换为货币

c# - Powerpoint 到文本 C# - Microsoft.Interop

c# - 如何为 Windows Phone 8 应用程序创建图表/图形?

excel - 为什么这些列没有正确锁定?