C# Excel插入行(不添加)
我有一个Excel'07采购订单模板文件。在模板上,只有3行项目的空间,然后模板显示总数 因此,基本上,在模板中它有: 第19行-项目 第20行-项目 第21行-项目 第22行-项目总数 不过,显然,大多数购买都会有3件以上的物品。那么,在打印出3个项目之后,如何在21和22之间插入一行呢 编辑;这就是我所拥有的:C# Excel插入行(不添加),c#,.net,excel,c#-4.0,C#,.net,Excel,C# 4.0,我有一个Excel'07采购订单模板文件。在模板上,只有3行项目的空间,然后模板显示总数 因此,基本上,在模板中它有: 第19行-项目 第20行-项目 第21行-项目 第22行-项目总数 不过,显然,大多数购买都会有3件以上的物品。那么,在打印出3个项目之后,如何在21和22之间插入一行呢 编辑;这就是我所拥有的: xlApp.Workbooks.Open(template, misValue, misValue, misValue, m
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());
xlApp.Workbooks.Open(模板、错误值、错误值、错误值、,
误判,误判,误判,误判,误判,误判,
错误价值,错误价值,错误价值,错误价值,错误价值);
int row=19;
if(poDetailBO1.MoveFirst())
{
做
{
itemsBO3.FillByPK(poDetailBO1.Style);
如果(第22行)
{
xlApp.Cells[row,1]=poDetailBO1.LineNo;
xlApp.Cells[行,2]=项SBO3.工厂;
xlApp.Cells[row,3]=poDetailBO1.Style;
xlApp.Cells[行,4]=itemsBO3.UPC_代码;
xlApp.Cells[行,5]=项sbo3.Item_说明;
xlApp.Cells[row,6]=“TARRIFF”;//稍后替换
xlApp.Cells[第7行]=项bO3.Plate_颜色;
xlApp.Cells[行,8]=itemsBO3.Color;
xlApp.Cells[row,9]=poDetailBO1.PrePack;
xlApp.Cells[第10行]=项目BO3.成本;
xlApp.Cells[行,11]=poDetailBO1.Qty;
xlApp.Cells[行,12]=poDetailBO1.Qty*项目BO3.Cost;
行++;
}
否则,如果(第22行>=22)
{
Excel.Range r=xlWorkSheet.Range[xlWorkSheet.Cells[row,misValue],xlWorkSheet.Cells[row,misValue];
r、 插入(Excel.XlInsertShiftDirection.xlShiftDown,misValue);
r、 Value2=“gobblydegook”;
行++;
}
}while(poDetailBO1.MoveNext());
然而,我的Insert被插入到了错误的工作表中,哈。而不是我想象中的插入位置-第2行,第19列。首先,我看不出你在哪里设置你的
xlWorksheet
,但这将是我检查你的单元格为什么被插入错误工作表的第一个地方
其次,我认为您的Excel.Range
对象设置不正确。您可能会遇到问题,因为您只在工作表.Cells
属性中指定行号,而不是列名。当我尝试在使用的单元格范围后插入单元格,而不是我想要的位置。我会倾向于我们建议使用工作表
对象的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);
直到我午休后,我才看到希德·霍兰德的帖子,一位同事给我发了一个代码,这个代码的功能基本上和他的一样
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,也能正常工作。公共静态无效CopyRowsDown(\u工作表工作表,int startRowIndex,int countToCopy)
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);
}
}
{
for(int i=1;i
适用于任何计数为什么不更改模板?每个PO 3个项目似乎太小了?您尝试了什么?我编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”@Derek:问题是,我不知道一个订单上可能有多少个项目……所以无论我如何更改模板,我都需要以任何方式插入行。除非你说要取消“总计”在第22行,在我完成添加项目后,自己按程序添加。好吧,您可能希望每张表有小计,最后一张表上有总计,所以您必须更改我想象的模板,除非已经合并了模板。3个项目似乎意味着生成更多的发票。