2016-02-02 3 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, автозаполнение, автоформат. У всех есть проблемы. Я, наконец, отказался от использования 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 [столбец] из ...

Таким образом, таблица формат будет автоматически расширяться в диапазоне вы вводите значение.