2010-03-16 6 views
0

en utilisant le code util MattExport GridView vers Excel

(un peu modifié pour le texte Unicode)

public class GridViewExportUtil 
{ 
    /// <param name="fileName"></param> 
    /// <param name="gv"></param> 
    public static void Export(string fileName, GridView gv) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.ContentType = "application/ms-excel"; 
     HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     HttpContext.Current.Response.Charset = System.Text.Encoding.Unicode.EncodingName; 
     HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode; 
     HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); 
     HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format(//"content-disposition", 
       "attachment; filename=Report.xml"));//, fileName)); // Need .XLS file 


     using (StringWriter sw = new StringWriter()) 
     { 
      using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
      { 
       // Create a form to contain the grid 
       Table table = new Table(); 

       // add the header row to the table 
       if (gv.HeaderRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
        table.Rows.Add(gv.HeaderRow); 
       } 

       // add each of the data rows to the table 
       foreach (GridViewRow row in gv.Rows) 
       { 
        GridViewExportUtil.PrepareControlForExport(row); 
        table.Rows.Add(row); 
       } 

       // add the footer row to the table 
       if (gv.FooterRow != null) 
       { 
        GridViewExportUtil.PrepareControlForExport(gv.FooterRow); 
        table.Rows.Add(gv.FooterRow); 
       } 

       // render the table into the htmlwriter 
       table.RenderControl(htw); 

       // render the htmlwriter into the response 
       HttpContext.Current.Response.Write(sw.ToString()); 
       HttpContext.Current.Response.End(); 
      } 
     } 
    } 

    /// <summary> 
    /// Replace any of the contained controls with literals 
    /// </summary> 
    /// <param name="control"></param> 
    private static void PrepareControlForExport(Control control) 
    { 
     for (int i = 0; i < control.Controls.Count; i++) 
     { 
      Control current = control.Controls[i]; 
      if (current is LinkButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); 
      } 
      else if (current is ImageButton) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); 
      } 
      else if (current is HyperLink) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); 
      } 
      else if (current is DropDownList) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); 
      } 
      else if (current is CheckBox) 
      { 
       control.Controls.Remove(current); 
       control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); 
      } 

      if (current.HasControls()) 
      { 
       GridViewExportUtil.PrepareControlForExport(current); 
      } 
     } 
    } 

Question: Comment faire fichier téléchargé modifiable (non seulement lire)

Et ... XLS ne s'ouvre pas avec le format Unicode. Quand je changer le format UTF8 Je ne vois pas les mots russes: S

Deuxième question: Comment faire pour Unicode .xls

Troisième question: Comment puis-je enregistrer des lignes de table?

Merci.

4 - comment créer la table dans la feuille NPOI

  int i =0; 
      if (gv.HeaderRow != null) 
      { 
       GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
       sheet1.CreateRow(1).CreateCell(i).SetCellValue(gv.HeaderRow.ToString()); 
       //table.Rows.Add(gv.HeaderRow); 
       i++; 
      } 

comme ça?

Répondre

1

HTML n'est pas la même chose que XML.

Le langage SpreadsheetML utilisé par Excel 2002/2003 est une langue complètement différente. Si vous obtenez même Excel pour ouvrir le fichier, c'est seulement parce qu'il a tendance à reconnaître les fichiers HTML indépendamment de l'extension du fichier.

En ce qui concerne le problème Unicode, je pense que le problème est le paramètre de codage de votre StringWriter lors de l'appel de ToString().

Je recommande à la recherche dans le projet NPOI, qui contient tout ce dont vous avez besoin pour créer des fichiers binaires/BIFF (Excel 97/2000), SpreadsheetML (Excel 2002/2003) et OOXML (Excel 2007) de .NET:

http://npoi.codeplex.com/

+0

aucune idée ... comment ajouter ma table déjà faite à la feuille? peut-être ... (vérifier la 1ère question) – Cynede

+0

Est-ce que cela fera des fichiers .xlsx à la place? – HardCorps88

Questions connexes