Excel insert rows (not Add)

前端 未结 3 1024
盖世英雄少女心
盖世英雄少女心 2020-12-11 20:05

I have an Excel \'07 Template file for a purchase order. On the template, there\'s only room for 3 rows worth of items, then the template shows the Total.

So, basica

相关标签:
3条回答
  • 2020-12-11 20:43

    First of all, I don't see where you are setting your xlWorksheet but that would be the first place I'd check to see why your cells are being inserted on the wrong sheet.

    Secondly, I don't think your Excel.Range object is being set up properly. You could be running into trouble because you're only specifying row numbers in the WorkSheet.Cells property and not column names. When I tried that I was getting cells inserted after the used range of cells, not where I wanted. I would be inclined to use the get_Range() method of the Worksheet object since that usually works in a more predictable manner.

    Given all that, depending on whether you want specific cells shifted down, or the entire row, you can use one of the following:

    // To shift down a set of cells from columns A to F
    
    Excel.Range r = xlWorkSheet.get_Range("A" + row.ToString(), "F" + row.ToString());
    r.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
    
    // To shift down all of a row
    
    Excel.Range r = xlWorkSheet.get_Range("A" + row.ToString(), "A" + row.ToString()).EntireRow;
    r.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
    
    0 讨论(0)
  • 2020-12-11 20:57

    I didn't see Sid Holland's post until after my lunch break, where a co-worker sent me this code that does basically the same thing as his...

        private void CopyRowsDown(int startrow, int count, Excel.Range oRange, Excel.Worksheet oSheet)
        {
            oRange = oSheet.get_Range(String.Format("{0}:{0}", startrow), System.Type.Missing);
            oRange.Select();
            oRange.Copy();
            //oApp.Selection.Copy();
    
            oRange = oSheet.get_Range(String.Format("{0}:{1}", startrow + 1, startrow + count - 1), System.Type.Missing);
            oRange.Select();
            oRange.Insert(-4121);
            //oApp.Selection.Insert(-4121);
    
        }
    

    Worked perfectly, even when count is 1.

    0 讨论(0)
  • 2020-12-11 21:03
    public static void CopyRowsDown(_Worksheet worksheet, int startRowIndex, int countToCopy)
        {
            for (int i = 1; i < countToCopy; i++)
            {
                var range = worksheet.get_Range(string.Format("{0}:{0}", startRowIndex, Type.Missing));
                range.Select();
                range.Copy();
    
                range = worksheet.get_Range(string.Format("{0}:{1}", startRowIndex + i, startRowIndex + i, Type.Missing));
                range.Select();
                range.Insert(-4121);
            }
        }
    

    works for any count

    0 讨论(0)
提交回复
热议问题