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); } }
适用于任何计数
- 如何在MS Excel单元格中使用C#添加数字validation
- OpenXML花费比OLEDB更长的时间从Excel工作表中读取行
- 我可以使用Microsoft.Office.Interop.Excel在未安装Microsoft Office包的系统上创buildExcel文件吗?
- 如何使用OpenXML从Excel表格中检索选项卡名称
- 通过.NET Office PIA在Excel.Application中设置当前目录
- OpenXML EmbeddedPackagePart和caching
- 如何将Excel工作表导出到新的工作簿
- 为COM Interop添加一个.NET EXE作为VBA参考(在Excel中)
- Math.Pow in .Net