2016-02-02 80 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 [专栏]定位柱...

通过这种方式,格式表将自动扩展至范围您输入的值。