4

注文書用の 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。

4

3 に答える 3

9

まず第一に、あなたがどこに設定しているのかわかりませんがxlWorksheet、セルが間違ったシートに挿入されている理由を確認する最初の場所です。

Excel.Range第二に、オブジェクトが適切に設定されていないと思います。WorkSheet.Cellsプロパティで列名ではなく行番号のみを指定しているため、問題が発生する可能性があります。試してみたところ、使用したセル範囲の後にセルが挿入されていましたが、必要な場所ではありませんでした。通常、より予測可能な方法で機能するためget_Range()、オブジェクトのメソッドを使用する傾向があります。Worksheet

以上のことから、特定のセルを下に移動するか、行全体を下に移動するかに応じて、次のいずれかを使用できます。

// 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);
于 2012-11-16T16:54:32.343 に答える
0

昼休みが終わるまで、Sid Hollandの投稿は表示されませんでした。そこで、同僚から、基本的に彼と同じことを行うこのコードが送られてきました...

    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の場合でも、完全に機能しました。

于 2012-11-16T19:25:05.450 に答える
0
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);
        }
    }

どんなカウントでも機能します

于 2016-08-29T12:13:33.530 に答える