Die Verwendung von C# zum Generieren von Excel-Dokumenten in der Anwendung und sogar die Bereitstellung einer direkten Download-Funktion ist eine relativ häufige Anwendung. Hier schreibe ich mehrere Methoden auf, auf die ich gestoßen bin, und es gibt einige Dinge, die beachtet werden müssen:
a) Definieren Sie zunächst eine Datenklasse:
Code
öffentliche Klasse DataContent
{
öffentlicher String Name { set;
öffentliche Zeichenfolge Adresse { get;
öffentliche Zeichenfolge Phone { set;
öffentliche Zeichenfolge GetContentByIndex(int index)
{
string Value = string.Empty;
Schalter(Index)
{
Fall 1:
Wert = Name;
brechen;
Fall 2:
Wert = Adresse;
brechen;
Fall 3:
Wert = Telefon;
brechen;
Standard:
Wert = "";
brechen;
}
Rückgabewert;
}
}
b) Die einfachste Methode: Excel-Dateien direkt durch Zusammenfügen von HTML-Strings generieren. Die Vorteile sind: Der Code ist sehr praktisch und kann ohne Erweiterung der Office-Schnittstelle funktionieren. Der Nachteil ist: Die abgedeckten Zellen sind begrenzt, obwohl er durchgesetzt werden kann Es handelt sich um eine Zwischenmethode. Beim Öffnen besteht jedoch immer noch das Problem eines falschen Formats, das sich nicht auf das normale Durchsuchen und Bearbeiten auswirkt. Bei einigen Anwendungen, die Excel-Dateien über Code bearbeiten müssen, können jedoch Probleme auftreten, z. B. beim Durchlesen von Inhalten OleDB.
1 Public void GetExcelDataToClient()
2 {
3 List<DataContent> arrDatas = new List<DataContent>() {
4 new DataContent() { Address="aaa", Name="aaa", Phone="aaa" },
5 new DataContent() { Address="bbb", Phone="bbb", Name="bbb" },
6 new 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 // Titelspalten.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Anwesend </B></TD>{0}</TR>", GetExCells(30)));
12 // Inhaltsspalten.
13 foreach (DataContent-Daten in 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 // Erweiterungszeilen hinzufügen.
16 sb.Append(GetExRows(50, 33));
17 // letzter Teil.
18 sb.Append("</TABLE></BODY></HTML>");
19 // Das Ergebnis als Excel-Datei zurückgeben.
20 Response.ContentType = "application/vnd.ms-excel";
21 Response.AddHeader("Content-Disposition", "attachment; filename=DataList.xls;filetype=excel");
22 Response.ContentEncoding = Encoding.GetEncoding("utf-8");
23 Response.Write(sb.ToString());
24 Response.Flush();
25 Response.End();
26}
27 // Erweiterungszellen hinzufügen.
28 privater String GetExCells(int num)
29 {
30 StringBuilder sb = new StringBuilder(200);
31 für (int i = 0; i < num; i++)
32 sb.Append("<TD></TD>");
33 return sb.ToString();
34}
35 // Erweiterungszeilen hinzufügen.
36 privater String GetExRows(int rowNum, int colNum)
37 {
38 StringBuilder sb = new StringBuilder(200);
39 for (int i = 0; i < rowNum; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 return sb.ToString();
42 }
c) Allgemeine Schnittstellenmethode: Generieren Sie hauptsächlich Excel-Dateien durch Aufrufen der von Office bereitgestellten Schnittstellenkomponente Microsoft.Office.Interop.Excel. Ihr Merkmal besteht darin, dass das Problem der unvollständigen Abdeckung von Inhaltszellen beseitigt werden kann Format der Eingabeaufforderung beim Öffnen, aber für den Betrieb von Dateien über OleDB muss es relativ streng geschrieben werden, da es sonst zu Problemen mit Formatanomalien während des Vorgangs kommt. Das Folgende ist die Standardschreibmethode:
1 privater void Test4()
2 {
3 string filePath = @"C:Test.xls";
4 List<DataContent> arrDatas = new List<DataContent>() {
5 new DataContent() { Address="aaa", Name="aaa", Phone="aaa" },
6 new DataContent() { Address="bbb", Phone="bbb", Name="bbb" },
7 new DataContent() { Name="ccc", Phone="ccc", Address="ccc"}
8};
9
10 Objekt objOpt = System.Reflection.Missing.Value;
11 Excel.Application objExcel = null;
12 Excel.Workbooks objBooks = null;
13 Excel.Workbook objBook = null;
14 Versuche
15 {
16 Versuche
17 {
18 objExcel = new Excel.Application();
19}
20 Fang (Ausnahme ex)
einundzwanzig {
22 Console.Write(ex.Message);
dreiundzwanzig }
vierundzwanzig
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // Daten zu Zellen des ersten Arbeitsblatts in der neuen Arbeitsmappe hinzufügen.
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] = "Name";
32 objSheet.Cells[1, 2] = "Adresse";
33 objSheet.Cells[1, 3] = "Telefon";
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 für (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 for (int j = 0; j < arrDatas.Count; j++)
44 objSheet.Cells[2 + j, i] = arrDatas[j].GetContentByIndex(i);
45 }
46 objSheet.Columns.AutoFit();
47 if (System.IO.File.Exists(filePath))
48 System.IO.File.Delete(filePath);
49 // Datei speichern.
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 = null;
56 GC.Collect();
57 //Antworten Sie die Datei an den Client.
58 string downloadFileName = string.Format("{0:yyyyMMdd}", 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 Response.ContentEncoding = Encoding.GetEncoding("utf-8");
63 Response.WriteFile(filePath);
64 Response.Flush();
65
66 if (System.IO.File.Exists(filePath))
67 System.IO.File.Delete(filePath);
68 Response.End();
69 }
70 Fang (Ausnahme ex)
71 {
72 if (objExcel != null)
73 {
74 versuchen
75 {
76 foreach (Excel.Workbook wb in objExcel.Workbooks)
77 {
78 if (wb != null)
79 {
80 Versuche
81 {
82 wb.Saved = true;
83}
84 Fang { }
85}
86}
87 objExcel.Workbooks.Close();
88 objExcel.Quit();
89 objExcel = null;
90 GC.Collect();
91 }
92 Fang { }
93}
94}
95 }
96
-