Excel插入行(不是添加)

我有一个采购订单的Excel '07模板文件。 在模板上,只有3行值的项目的空间,然后模板显示总计。

所以,基本上,在模板中有:第19行 – 第20行 – 第21行 – 第22行 – 项目总数

显然,大多数购买将有超过3项,但。 那么在打印3个项目之后,如何在21和22之间插入一行呢?

编辑; 所以这就是我所拥有的:

xlApp.Workbooks.Open(template, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); int row = 19; if (poDetailBO1.MoveFirst()) { do { itemsBO3.FillByPK(poDetailBO1.Style); if (row < 22) { xlApp.Cells[row, 1] = poDetailBO1.LineNo; xlApp.Cells[row, 2] = itemsBO3.Factory; xlApp.Cells[row, 3] = poDetailBO1.Style; xlApp.Cells[row, 4] = itemsBO3.UPC_Code; xlApp.Cells[row, 5] = itemsBO3.Item_Description; xlApp.Cells[row, 6] = "TARRIFF"; //To be replaced later xlApp.Cells[row, 7] = itemsBO3.Plate_Color; xlApp.Cells[row, 8] = itemsBO3.Color; xlApp.Cells[row, 9] = poDetailBO1.PrePack; xlApp.Cells[row, 10] = itemsBO3.Cost; xlApp.Cells[row, 11] = poDetailBO1.Qty; xlApp.Cells[row, 12] = poDetailBO1.Qty * itemsBO3.Cost; row++; } else if (row >= 22) { Excel.Range r = xlWorkSheet.Range[xlWorkSheet.Cells[row, misValue], xlWorkSheet.Cells[row, misValue]]; r.Insert(Excel.XlInsertShiftDirection.xlShiftDown, misValue); r.Value2 = "GOBBLYDEEGOOK"; row++; } } while (poDetailBO1.MoveNext()); 

但是,我的插入插入到错误的工作表,哈。 而不是我想象得到的插入 – 第2行,第19列。

首先,我没有看到你在哪里设置你的xlWorksheet但这将是我要检查的第一个地方,看看你的单元格被插入到错误的表单上。

其次,我不认为你的Excel.Range对象设置正确。 您可能会遇到麻烦,因为您只在WorkSheet.Cells属性中指定行号,而不是列名称。 当我试图在单元格的使用范围之后插入单元格时,并不是我想要的。 我倾向于使用Worksheet对象的get_Range()方法,因为它通常以更可预测的方式工作。

考虑到所有这一切,取决于您希望特定的单元格向下移动还是整行,可以使用下列之一:

 // 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); 

我没有看到Sid Holland的post,直到午休之后,一位同事给我发了这个和他的基本相同的代码。

  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); } 

工作完美,即使计数是1。

 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); } } 

适用于任何计数