C# 如何在excel中将sheet1中的数据移动到sheet2

C# 如何在excel中将sheet1中的数据移动到sheet2,c#,.net,excel,interop,excel-interop,C#,.net,Excel,Interop,Excel Interop,我正在通过c#将内容写入excel文件。我在excel中有4列和许多行。当应用程序运行时,我需要检查sheet1中是否存在数据,然后将其移动到sheet2。如果sheet2还包含数据,则应在其后面附加sheet2数据。我正在使用interop dll访问excel。我已经完成了内容的编写,但是如何以编程方式移动它呢?这就是我试过的 Excel.Workbook xlwb; Excel.Application excelApp = new Excel.Application(); Ex

我正在通过c#将内容写入excel文件。我在excel中有4列和许多行。当应用程序运行时,我需要检查sheet1中是否存在数据,然后将其移动到sheet2。如果sheet2还包含数据,则应在其后面附加sheet2数据。我正在使用interop dll访问excel。我已经完成了内容的编写,但是如何以编程方式移动它呢?这就是我试过的

  Excel.Workbook xlwb;
  Excel.Application excelApp = new Excel.Application();
  Excel.Worksheet xlssheet1;
  Excel.Worksheet xlssheet2; 
 xlwb = excelApp.Workbooks.Open(myPath, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing,
                                    objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
            int rowIndex = 2; int colIndex = 1;
            if (excelApp.Cells[rowIndex, colIndex] != null)
            {
                xlssheet1 = (Worksheet)xlwb.Worksheets[1];
                xlssheet2 = (Worksheet)xlwb.Worksheets[2];

                xlwb.Sheets.Move(System.Reflection.Missing.Value, xlssheet2);
                xlwb.Save();                

            }

如果找不到“移动”数据的方法,请手动移动数据:

  • 将值复制到
  • 确保副本有效
  • 使原始单元格空白
  • 拯救

  • 首先,我要定义一个函数来查找工作表中最后使用的行:

    private int LastUsedRow(Excel.Worksheet aSheet)
    {
        object hmissing = System.Reflection.Missing.Value;
        string usedAddress = aSheet.UsedRange.get_Address(hmissing, hmissing, Excel.XlReferenceStyle.xlA1, hmissing, hmissing);
        return int.Parse(usedAddress.Substring(usedAddress.LastIndexOf('$') + 1));
    }
    
    然后,您的代码可以通过以下方式将单元格从一个工作表迭代复制到另一个工作表:

    Excel.Workbook xlwb;
    Excel.Application excelApp = new Excel.Application();
    Excel.Worksheet xlssheet1;
    Excel.Worksheet xlssheet2; 
    xlwb = excelApp.Workbooks.Open(myPath, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
    xlssheet1 = (Worksheet)xlwb.Worksheets[1];
    xlssheet2 = (Worksheet)xlwb.Worksheets[2];
    int lastRow1 = LastUsedRow(xlssheet1);
    int lastRow2 = LastUsedRow(xlssheet2);
    int curRow = lastRow2 + 1;
    for (int i = 1; i <= lastRow1; i++)
    {
        object toCopy = xlsheet1.getRange("A"+i, "D" + i).get_Value(null);
        xlsheet2.getRange("A"+curRow, "D" + curRow).set_Value(null, toCopy);
        curRow++;
    }
    xlwb.Save();                
    
    Excel.xlwb;
    Excel.Application excelApp=新的Excel.Application();
    Excel.工作表xlssheet1;
    Excel.工作表xlssheet2;
    xlwb=excelApp.Workbooks.Open(myPath、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing、objMissing);
    xlssheet1=(工作表)xlwb.工作表[1];
    xlssheet2=(工作表)xlwb.工作表[2];
    int lastRow1=LastUsedRow(xlssheet1);
    int lastRow2=LastUsedRow(xlssheet2);
    int curRow=lastRow2+1;
    
    对于(int i=1;我过去使用过InterOp,发现它非常麻烦。如果你知道你不会处理旧的excel文件,我建议你看看(或简化的第三方)。我不能手动移动。因为它可能包含许多行,而且是一项日常任务。我说“手动”我的意思是通过编程。如中所示,如果找不到“移动”函数,只需复制并将原始单元格留空(通过代码)。这将产生相同的效果。您最初的问题是“我可以编写单元格,但如何移动它们”-还请注意,您选择的答案实际上并没有移动值,而是复制了它们。@Baruchelli:嗨,这很好。只需一次更新,我们需要将curRow增加1。否则,只有一个值将复制到sheet2。内部for循环:if(i>1)curRow=curRow+1;。非常感谢您的解决方案。