繁体   English   中英

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

[英]Set cell value using Excel interop

好的,所以我试图用excel互操作库设置一个单元格的值。 我可以用以下内容完成:

sheet.Cells[row, col] = value;

但是我设置的数量非常慢。 所以我正试着走这条路:

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

代码执行,但没有数据放入单元格。 关于我缺少什么的任何建议? 谢谢!

如果您禁用了屏幕更新( Application.ScreenUpdating = false ),那么您的第一种方法应该适用于任何合理(以及大量不合理)数量的单元格。 知识库文章描述了如何使用行和列的C#访问来设置单元格。

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

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

int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Range rng = excelApp.get_Range("A1", "J1");
rng.Value = intArray; 

你应该比迭代你想要设置的每个单元格更快。

除此之外,请关闭Screenypdated,如安迪所建议的那样,并考虑将计算设置为手动,直到您完成复制过程。

简单的解决方案,但在这里你需要通过在nuget控制台中写入来安装Package 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();

请试试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM