C# 使用Excel互操作设置单元格值

C# 使用Excel互操作设置单元格值,c#,excel-interop,C#,Excel Interop,好的,我正在尝试使用excel互操作库设置单元格的值。我可以通过以下几点做到这一点: sheet.Cells[row, col] = value; int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; Range rng = excelApp.get_Range("A1", "J1"); rng.Value = intArray; 但我设定的速度太慢了。所以我试着走这条路: Range excelRange = shee

好的,我正在尝试使用excel互操作库设置单元格的值。我可以通过以下几点做到这一点:

sheet.Cells[row, col] = value;
int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Range rng = excelApp.get_Range("A1", "J1");
rng.Value = intArray; 
但我设定的速度太慢了。所以我试着走这条路:

Range excelRange = sheet.UsedRange;
excelRange.Cells.set_Item(row, col, value);

代码执行,但单元格中没有数据。对我遗漏的东西有什么建议吗?谢谢

如果您已禁用屏幕更新(
Application.screenUpdate=false
),则第一种方法对于任何合理(以及大量不合理)数量的单元格都可以正常工作。描述如何使用C#按行和列访问设置单元格。

您是否尝试过一次设置所有值,而不是遍历数组并一次设置一个单元格?这样,您只需在COM边界上传递数据一次,而不是每个单元传递一次

Excel在这方面非常灵活。请尝试以下操作:

sheet.Cells[row, col] = value;
int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Range rng = excelApp.get_Range("A1", "J1");
rng.Value = intArray; 
这应该比在要设置的每个单元格上迭代更快

除此之外,关闭安迪建议的屏幕更新,也考虑将计算设置为手动直到完成复制过程。

< P>请尝试

[excelWorksheet].Cells[1, 1] = "[String you want]";

简单的解决方案,但在这里,您需要通过在nuget控制台中写入来安装软件包Microsoft.Office.Interop.Excel

安装软件包Microsoft.Office.Interop.Excel

   //test excel file
   Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

        Workbook workbook = excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "/TrainedFaces/AttendanceLog.xlsx", ReadOnly: false, Editable: true);
        Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet;
        if (worksheet == null)
            return;

        var abc = worksheet.Cells[2, 1].Value;
        Range row1 = worksheet.Rows.Cells[1, 1];
        Range row2 = worksheet.Rows.Cells[2, 1];

        row1.Value = "Test100";
        row2.Value = "Test200";


        excel.Application.ActiveWorkbook.Save();
        excel.Application.Quit();
        excel.Quit();

我们说的是多少个单元格?值中有值吗?“值”的类型是否正确,因此可以放在单元格中?嗯,我尝试了这个方法,但行中有几个单元格合并在一起,并且没有正确地设置值。我使用的是一个对象数组,因为数据是混合的,一些小数,一些字符串。你也可以使用多维数组来填充一个范围。嗯,这对我不适用。我将
object[]
赋值给
range.Value
,所有单元格都会得到数组第一项的值。请帮帮我,把它弄明白!填充由多行组成的范围时,必须使用二维数组。Excel Interop不会自动按行断开常规(一维)数组。