C#打开Exel模板,复制行格式并将新数据插入到每个新行中

时间:2018-08-11 18:38:52

标签: c# excel

我希望遍历文件夹中的所有文件,并将其文件名添加到Excel中的一行中。为此,我有一个要使用的Excel模板文件,并开始在包含公式的特定行上添加数据。

我使用以下数据,并且能够遍历文件,但是由于出现错误,我无法复制行并在粘贴数据之前插入另一行

    string rootfolder = Path.GetDirectoryName(path);
    string folder = Path.GetFileName(Path.GetDirectoryName(path));

    var excelApp = new Application();
    var workbook = excelApp.Workbooks.Open(fileName);
    var mWorkSheets = workbook.Worksheets;
    var worksheet = (Worksheet)mWorkSheets.get_Item("Invoice");

    excelApp.Visible = true;

    int x = 13;  // <- The row to copy which has formulas
        Range RngToCopy = worksheet.get_Range("b13" , "l13").EntireRow;
        foreach (var item in files)
        {

            Range RngToInsert = worksheet.get_Range("b" + x, Type.Missing).EntireRow;
            RngToInsert.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, RngToInsert.Copy(Type.Missing));  // --< Throws the error

            worksheet.Cells[x, 2].Value2 = item.date;
            worksheet.Cells[x, 3].Value2 = item.reference;
            worksheet.Cells[x, 4].Value2 = item.source;
            worksheet.Cells[x, 5].Value2 = item.count;
            worksheet.Cells[x, 6].Value2 = item.costPerWord;
            worksheet.Cells[x, 7].Value2 = item.STBY;
            worksheet.Cells[x, 8].Value2 = item.costSTBY;
            worksheet.Cells[x, 9].Value2 = item.SCH;
            worksheet.Cells[x, 10].Value2 = item.costSCH;

            x++;
        }

错误

  

// System.Runtime.InteropServices.COMException:'这不起作用   因为它会移动工作表中表格中的单元格。”

2 个答案:

答案 0 :(得分:1)

我想这取决于您的模板。 当您尝试在Excel中编辑格式表或链接表(例如odbc)时,会出现错误消息。 您可以使用空白的excel表格尝试代码,以查看是否可行,如果这是模板本身而不是代码的问题。

代码本身看起来不错

答案 1 :(得分:0)

我最终只是将一个公式直接添加到单元格中

    int x = 13;

    Range line = (Range)worksheet.Rows[13].EntireRow;
    foreach (var item in files)
    {

        worksheet.Cells[x, 2].Value2 = item.date;
        worksheet.Cells[x, 3].Value2 = item.reference;
        worksheet.Cells[x, 4].Value2 = item.source;
        worksheet.Cells[x, 5].Value2 = item.count;
        worksheet.Cells[x, 6].Value2 = item.costPerWord;
        worksheet.Cells[x, 7].Value2 = item.STBY;
        worksheet.Cells[x, 8].Value2 = item.costSTBY;
        worksheet.Cells[x, 9].Value2 = item.SCH;
        worksheet.Cells[x, 10].Value2 = item.costSCH;

        worksheet.Cells[x, 11].Formula = string.Format("=SUM(F{0}+H{0}+J{0})", x);