2010-03-11 3 views
4

Я экспортирую datatable в лист excel успешно ... В этом листе excel я должен отображать столбцы (customerid, Productname, referenceno) таблицы данных, за исключением последнего столбца .... теперь как я могу отобразить таблицу данных в Excel без дисплея последнего столбца (referenceno) ...Удалить столбец в datatable

кто-нибудь сказать мне решение этой проблемы .. заранее спасибо ..

вот мой код для экспорта datatable to excel:

  System.Data.DataTable dt = clsobj.convert_datagrid_orderlist_to_datatable(dvgorderlist, txtreferenceno); 

     oxl = new Excel.Application(); 
     oxl.Visible = true; 
     oxl.DisplayAlerts = false; 

     wbook = oxl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
     oxl.ActiveCell.set_Item(2, 4, "Alfa Aesar"); 

     wsheet = (Excel.Worksheet)wbook.ActiveSheet; 

     wsheet.Name = "Customers"; 
     Excel.Range range = wsheet.get_Range("A6", "H6"); 

     wsheet.get_Range("A6", "H6").Font.Name = "Times new Roman"; 
     wsheet.get_Range("A6", "H6").Font.Size = 12; 
     wsheet.get_Range("A6", "H6").Interior.Color = ConvertColour(Color.SkyBlue); 

     oxl.ActiveWindow.DisplayGridlines = false; 

     int rowCount = 5; 
     foreach (DataRow dr in dt.Rows) 
     { 
      rowCount += 1; 
      for (int i = 1; i < dt.Columns.Count + 1; i++) 
      { 
       // Add the header the first time through 
       if (rowCount == 7) 
       { 
        wsheet.Cells[6, i] = dt.Columns[i - 1].ColumnName; 

       } 
       wsheet.Cells[rowCount, i] = dr[i - 1].ToString(); 
       Excel.Range cellRange = (Range)wsheet.Cells[rowCount, i]; 
       //cellRange.Interior.Color = 200; 
       //cellRange.Interior.Color = ConvertColour(Color.LightBlue); 
       cellRange.Cells.Borders.LineStyle = BorderStyle.FixedSingle; 
      } 


     } 

     cells = wsheet.get_Range(wsheet.Cells[2, 2], 
         wsheet.Cells[rowCount, dt.Columns.Count]); 
     cells.EntireColumn.AutoFit(); 


     wsheet = null; 
     cells = null; 
+0

Вы хотите скрыть это в excel или не установить колонку? –

ответ

3

в вашем заявлении для изменения этой линии

for (int i = 1; i < dt.Columns.Count + 1; i++) 

с этим один

var filteredColumns = dt.Columns.OfType<DataColumn>() 
     .Where(x=> x.ColumnName != "referenceno"); 
       foreach (var column in filteredColumns) 
{ 
    //do whatever you want 
      //if you need the index you can create counter and increase it by 1 each loop 
} 

не забудьте использовать Linq

using System.Linq ; 
1

Возможно, вы попробуйте

dt.Columns.Remove[dt.Columns.Count - 1]; 
+0

спасибо за сообщение ур ответ ... но этот код не работает ... и как эта линия узнает, что colour column? – Suryakavitha

0

Попробуйте Worksheet.get_Range("rangeVal", "rangeVal").EntireColumn.Hidden = true;

0

dt.Columns.Remove [ColumnIndex];

Или

dt.Columns.Remove [ "ColumnName"];

попробовать любой ...

1
foreach (DataColumn dc in dt.Columns) 
{ 
    bool deleteIt = true; 
    foreach (StringDictionary sd in sdArray) 
    { 
     if (dc.ColumnName.Equals(sd["Name"])) 
      deleteIt = false; 
    } 
    if (deleteIt) 
     data.Columns.Remove(dc); 
} 

sdArray содержит все столбцы, которые вы хотите в вашем рабочем листе Excel. Если вы предпочитаете, вы можете использовать обычный string[]. Я использовал массив StringDictionaries, потому что у меня есть больше информации для каждой строки, например ширины.

Linq также очень полезен для использования в таких задачах, но приведенный выше пример поддерживает только одну строку. Поэтому я решил, что нам нужно разнообразие.

Смежные вопросы