Utiliser C# pour générer des documents Excel dans l'application, et même fournir une fonction de téléchargement direct, est une application relativement courante. J'enregistre ici plusieurs méthodes que j'ai rencontrées, et certaines choses nécessitent une attention particulière :
a) Définissez d’abord une classe de données :
code
classe publique DataContent
{
chaîne publique Nom {set; get;
chaîne publique Adresse { set; get }
chaîne publique Téléphone {set; get;
chaîne publique GetContentByIndex(int index)
{
valeur de chaîne = chaîne.Empty ;
commutateur (index)
{
cas 1 :
Valeur = Nom ;
casser;
cas 2 :
Valeur = Adresse ;
casser;
cas 3 :
Valeur = Téléphone ;
casser;
défaut:
Valeur = "" ;
casser;
}
valeur de retour ;
}
}
b) La méthode la plus simple : générer des fichiers Excel directement en rassemblant des chaînes HTML. Les avantages sont : le code est très pratique et peut fonctionner sans aucune extension de l'interface bureautique. L'inconvénient est : les cellules couvertes sont limitées, bien qu'il puisse être paramétré via ; une méthode intermédiaire, mais il existe toujours un problème de format incorrect lors de l'ouverture, qui n'affecte pas la navigation et l'édition normales. Cependant, pour certaines applications qui doivent exploiter des fichiers Excel via du code, vous pouvez rencontrer des problèmes, par exemple lors de la lecture du contenu. OleDB.
1 Vide public GetExcelDataToClient()
2 {
3 List<DataContent> arrDatas = new List<DataContent>() {
4 new DataContent() { Adresse="aaa", Nom="aaa", Phone="aaa" },
5 new DataContent() { Adresse="bbb", Téléphone="bbb", Nom="bbb" },
6 nouveaux DataContent() { Name="ccc", Phone="ccc", Address="ccc"}
7} ;
8
9 StringBuilder sb = new StringBuilder("<HTML xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns= " http://www.w3.org/TR/REC-html40"><HEAD><META HTTP-EQUIV="Content-Type" content="text/html; charset=gb_2312-80 "><TITLE></TITLE><style>td{mso-number-format:" \@";}</style></HEAD><BODY><TABLE border="1"> ", 500);
10 // colonnes de titre.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Participé </B></TD>{0}</TR>", GetExCells(30)));
12 // colonnes de contenu.
13 foreach (données DataContent dans arrDatas)
14 sb.Append(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR> ", data.Name, data.Address, data.Phone, GetExCells(30)));
15 // ajoute des lignes d'extension.
16 sb.Append(GetExRows(50, 33));
17 // dernière partie.
18 sb.Append("</TABLE></BODY></HTML>");
19 // répond au résultat sous forme de fichier Excel.
20 Response.ContentType = "application/vnd.ms-excel" ;
21 Response.AddHeader("Content-Disposition", "attachment; filename=DataList.xls;filetype=excel");
22 Réponse.ContentEncoding = Encoding.GetEncoding("utf-8");
23 Réponse.Write(sb.ToString());
24 Réponse.Flush();
25 Réponse.End();
26}
27 // ajoute les cellules d'extension.
28 chaînes privées GetExCells (int num)
29 {
30 StringBuilder sb = nouveau StringBuilder(200);
31 pour (int i = 0; i < num; i++)
32 sb.Append("<TD></TD>");
33 return sb.ToString();
34}
35 // ajoute les lignes d'extension.
36 chaînes privées GetExRows (int rowNum, int colNum)
37 {
38 StringBuilder sb = nouveau StringBuilder(200);
39 pour (int i = 0; i < rowNum; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 return sb.ToString();
42 }
c) Méthode d'interface générale : générez principalement des fichiers Excel en appelant le composant d'interface Microsoft.Office.Interop.Excel fourni par Office. Sa caractéristique est qu'il peut éliminer le problème de la couverture incomplète des cellules de contenu, et il peut également éliminer le problème de la couverture incomplète des cellules de contenu. format d'invite d'ouverture anormal. , mais dans le cas de l'exploitation de fichiers via OleDB, il doit être écrit de manière relativement stricte, sinon il y aura des problèmes d'anomalies de format pendant l'opération. Voici la méthode d'écriture standard :
1 vide privé Test4()
2 {
3 chaînes filePath = @"C:Test.xls";
4 List<DataContent> arrDatas = new List<DataContent>() {
5 new DataContent() { Adresse="aaa", Nom="aaa", Téléphone="aaa" },
6 nouveau DataContent() { Adresse="bbb", Téléphone="bbb", Nom="bbb" },
7 nouveau DataContent() { Name="ccc", Phone="ccc", Adresse="ccc"}
8} ;
9
10 objets objOpt = System.Reflection.Missing.Value ;
11 Excel.Application objExcel = null ;
12 Excel.Workbooks objBooks = null ;
13 Excel.Workbook objBook = null ;
14 essai
15 {
16 essais
17 {
18 objExcel = new Excel.Application();
19}
20 prises (Exception ex)
vingt-et-un {
22 Console.Write(ex.Message);
vingt-trois }
vingt-quatre
25 objBooks = (Excel.Workbooks)objExcel.Workbooks ;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // Ajoutez des données aux cellules de la première feuille de calcul du nouveau classeur.
28 Excel.Sheets objSheets = (Excel.Sheets)objBook.Worksheets;
29 Excel.Worksheet objSheet = (Excel.Worksheet)(objSheets.get_Item(1));
30 objSheet.Name = "DataList" ;
31 objSheet.Cells[1, 1] = "Nom" ;
32 objSheet.Cells[1, 2] = "Adresse" ;
33 objSheet.Cells[1, 3] = "Téléphone" ;
34 Excel.Range objRange = objSheet.get_Range(objSheet.Cells[1, 1], objSheet.Cells[1, 3]);
35 //objRange.Font.Bold = true;
36 objRange.Font.Size = 18;
37 objRange.Interior.ColorIndex = 37;
38
39 pour (int i = 1; i < 4; i++)
40 {
41 objRange = objSheet.get_Range(objSheet.Cells[2, i], objSheet.Cells[2 + arrDatas.Count, i]);
42 objRange.NumberFormatLocal = "@";
43 pour (int j = 0; j < arrDatas.Count; j++)
44 objSheet.Cells[2 + j, i] = arrDatas[j].GetContentByIndex(i);
45 }
46 objSheet.Columns.AutoFit();
47 si (System.IO.File.Exists (filePath))
48 System.IO.File.Delete(filePath);
49 // Enregistrez le fichier.
50 objBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, objOpt, objOpt,
51 objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
52 objOpt, objOpt, objOpt, objOpt, objOpt);
53 objBook.Close(false, objOpt, objOpt);
54 objExcel.Quit();
55 objExcel = nul ;
56 GC.Collect();
57 //Répondre le fichier au client.
58 chaînes downloadFileName = string.Format("{0:aaaaMMjj}", DateTime.Now) + "-" +
59 this.Page.User.Identity.Name + "-DataList.xls";
60 Response.ContentType = "application/vnd.ms-excel" ;
61 Response.AddHeader("Content-Disposition", "attachment; filename=" + downloadFileName + ";filetype=excel");
62 Réponse.ContentEncoding = Encoding.GetEncoding("utf-8");
63 Réponse.WriteFile(filePath);
64 Réponse.Flush();
65
66 si (System.IO.File.Exists (filePath))
67 System.IO.File.Delete(filePath);
68 Réponse.End();
69 }
70 prises (Exception ex)
71 {
72 si (objExcel != null)
73 {
74 essayer
75 {
76 foreach (Excel.Workbook wb dans objExcel.Workbooks)
77 {
78 si (wb != nul)
79 {
80 essais
81 {
82 wb.Saved = vrai ;
83}
84 captures { }
85}
86}
87 objExcel.Workbooks.Close();
88 objExcel.Quit();
89 objExcel = nul ;
90 GC.Collect();
91 }
92 captures { }
93}
94}
95 }
96
-