2016-02-02 127 views
0

我試圖在使用OLEDB工作表的末尾插入新行。工作表在範圍(a1:xx)中有一個格式表格,格式和公式存儲。但OLEDB插入不帶任何格式。在Excel中使用C自動擴展格式化表格

我已閱讀帖子How to copy format of one row to another row in Excel with c#談論獲取格式,但不適合我。另外,我不認爲它會得到公式。

在Excel用戶界面中,格式化表格的右下角會出現一個雙箭頭,我們可以通過拖動它來擴展格式表範圍。

Image: What it looks like in the Excel

什麼,我們可以通過C#嗎?

謝謝。

 Excel.Range last = xlWS.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing); 
     Excel.Range RngToCopyOri = xlWS.get_Range("A1", last).EntireRow; 
     Excel.Range RngToCopy = RngToCopyOri.Resize[RngToCopyOri.Rows.Count + 1, RngToCopyOri.Columns.Count]; //because insert will add only 1 row, so the range would be one row larger 
     Excel.Range RngToInsert = xlWS.get_Range("A1", Type.Missing).EntireRow; 
     RngToInsert.Insert(Excel.XlInsertShiftDirection.xlShiftDown, RngToCopy.Copy(Type.Missing)); 

我試圖將範圍(A1,左下角的單元格)複製到它的原始位置,但沒有任何改變。

回答

0

我試過Range.resize,autofill,autoformat。他們都有問題。我終於放棄使用OLEDB插入數據。相反,我用

worksheet.UsedRange.Item[rowNo,getColumnIndex(worksheet,columnTitle)]=value 

private int getColumnIndex(Excel.Worksheet sheetname, string header) { 
     int index=0; 
     Excel.Range activeRange=sheetname.UsedRange; 
     for (int i = 1; i <= activeRange.Columns.Count; i++) { 
      if (header == (string)(activeRange.Item[1,i] as Excel.Range).Value) { 
       index = i; 
      } 
     } 
     if(index==0) 
      throw some exception you like; 
     return index; 
    } 

的getColumnIndex功能旨在從SELECT [專欄]定位柱...

通過這種方式,格式表將自動擴展至範圍您輸入的值。