C# Excel插入行(不添加)

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

我有一个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());
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个项目似乎意味着生成更多的发票。