2012-11-16 8 views
4

구매 주문을위한 Excel '07 템플릿 파일이 있습니다. 템플릿에는 3 행의 항목에 대한 공간 만 있으며, 템플릿에는 합계가 표시됩니다.Excel 행 삽입 (추가 아님)

그래서, 기본적으로 템플릿에가 있습니다 행 19 - 항목 행 20 - 항목 21 행 - 항목 행 (22) -

분명히 항목의 총, 대부분의 구매해야합니다 3 개 이상 항목. 그러면 행을 21에서 22 사이에 삽입하고 3 개 항목을 인쇄 한 후 어떻게됩니까?

편집; 그래서 여기에 내가 무엇을 가지고 :

  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입니다.

+0

템플릿을 변경하지 않는 이유는 무엇입니까? PO 당 3 개 항목이 너무 작게 보입니까? 너 뭐 해봤 어? – Derek

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

@Derek : 문제는 하나의 PO에 얼마나 많은 항목이 있는지 알 수 없기 때문에 템플릿을 어떻게 변경 하든지간에 행을 삽입해야합니다. 22 행에 "Total"을 스크랩하고 항목 추가를 마친 후에 프로그래밍 방식으로 직접 추가하지 않는다면 말입니다. – user1096207

답변

9

우선, 내가 확인하는 첫 번째 장소는 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); 
0

내 점심 때까지 시드 네덜란드의 게시물을 참조하지 않았다 동료가 나에게 기본적으로 자신과 같은 일을이 코드를 ... 보낸 곳, 휴식

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

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); 
     } 
    } 
경우에도 완벽하게 작동

어떤 숫자에도 사용할 수 있습니다.