2010-03-11 8 views
4

J'exporte avec succès une datable à une feuille excel ... Dans cette feuille excel je dois afficher les colonnes (customerid, ProductName, referenceno) de la table de données sauf la dernière colonne .... maintenant comment puis-je afficher le tableau de données dans Excel sans afficher la dernière colonne (ReferenceNo) ...Supprimer colonne dans datable

quelqu'un me dire la solution de ce problème .. Merci à l'avance ..

ici est mon code pour l'exportation datable pour exceler:

  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

Voulez-vous le cacher dans Excel, ou ne pas définir la colonne du tout? –

Répondre

3

Dans votre déclaration pour changer cette ligne

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

avec celui-ci

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 
} 

ne pas oublier d'utiliser LINQ

using System.Linq ; 
1

Avez-vous essayé

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

merci pour poster votre réponse ... mais ce code ne fonctionne pas ... et comment cette ligne trouve-t-elle cette colonne particulière? – Suryakavitha

0

Essayez Worksheet.get_Range("rangeVal", "rangeVal").EntireColumn.Hidden = true;

0

dt.Columns.Remove [ColumnIndex];

Ou

dt.Columns.Remove [ "ColumnName"];

essayer tout ...

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 contient toutes les colonnes que vous voulez dans votre feuille de calcul Excel. Si vous préférez, vous pouvez utiliser un string[] normal à la place. J'ai utilisé un tableau de StringDictionaries parce que j'ai plus d'informations par ligne, comme la largeur.

Linq est également très génial à utiliser pour ce genre de tâches, mais l'exemple ci-dessus ne prend en charge qu'une seule ligne. Donc j'ai pensé que nous avions besoin d'une certaine diversité.