การใช้ C# เพื่อสร้างเอกสาร Excel ในแอปพลิเคชัน และแม้กระทั่งการให้ฟังก์ชันการดาวน์โหลดโดยตรง ก็เป็นแอปพลิเคชันที่ค่อนข้างธรรมดา ในที่นี้ ฉันบันทึกวิธีการต่างๆ ที่ฉันพบ และมีบางสิ่งที่ต้องให้ความสนใจ:
ก) ขั้นแรกให้กำหนดคลาสข้อมูล:
รหัส
DataContent ระดับสาธารณะ
-
ชื่อสตริงสาธารณะ { set; get;
ที่อยู่สตริงสาธารณะ { ชุด;
โทรศัพท์สตริงสาธารณะ { ชุด;
สตริงสาธารณะ GetContentByIndex (ดัชนี int)
-
ค่าสตริง = string.Empty;
สวิตช์ (ดัชนี)
-
กรณีที่ 1:
ค่า = ชื่อ;
หยุดพัก;
กรณีที่ 2:
ค่า = ที่อยู่;
หยุดพัก;
กรณีที่ 3:
ค่า = โทรศัพท์;
หยุดพัก;
ค่าเริ่มต้น:
ค่า = "";
หยุดพัก;
-
ค่าส่งคืน;
-
-
b) วิธีที่ง่ายที่สุด: สร้างไฟล์ Excel โดยตรงโดยการรวมสตริง HTML เข้าด้วยกัน ข้อดีคือ: โค้ดสะดวกมากและสามารถทำงานได้โดยไม่ต้องมีส่วนขยายอินเทอร์เฟซของ office ใดๆ ข้อเสียคือ: เซลล์ที่ครอบคลุมนั้นมีจำกัด แม้ว่าจะสามารถตั้งค่าได้ก็ตาม วิธีการระดับกลาง แต่ยังคงมีปัญหาเรื่องรูปแบบที่ไม่ถูกต้องเมื่อเปิดซึ่งไม่ส่งผลกระทบต่อการเรียกดูและแก้ไขตามปกติ อย่างไรก็ตาม สำหรับบางแอปพลิเคชันที่จำเป็นต้องใช้งานไฟล์ Excel ผ่านโค้ด คุณอาจประสบปัญหา เช่น เมื่ออ่านเนื้อหาผ่าน โอเลดีบี.
1 โมฆะสาธารณะ GetExcelDataToClient()
2 {
3 รายการ <DataContent> arrDatas = รายการใหม่ <DataContent>() {
4 DataContent ใหม่ () { ที่อยู่ = "aaa", ชื่อ = "aaa", โทรศัพท์ = "aaa" },
5 DataContent ใหม่ () { ที่อยู่ = "bbb", โทรศัพท์ = "bbb", ชื่อ = "bbb" },
6 DataContent ใหม่ () { ชื่อ = "ccc", โทรศัพท์ = "ccc", ที่อยู่ = "ccc"}
7};
8
9 StringBuilder sb = ใหม่ 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 // คอลัมน์หัวเรื่อง.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>รหัสผู้ใช้</B></TD><TD><B>เข้าร่วม </B></TD>{0}</TR>", GetExCells(30)));
12 // คอลัมน์เนื้อหา
13 foreach (ข้อมูล DataContent ใน arrDatas)
14 sb.ผนวก(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR> ", data.Name, data.Address, data.Phone, GetExCells(30)));
15 // เพิ่มแถวส่วนขยาย.
16 sb.ผนวก(GetExRows(50, 33));
17 // ตอนสุดท้าย.
18 sb.Append("</TABLE></BODY></HTML>");
19 // ตอบกลับผลลัพธ์เป็นไฟล์ Excel
20 Response.ContentType = "application/vnd.ms-excel";
21 Response.AddHeader("การจัดการเนื้อหา", "ไฟล์แนบ; filename=DataList.xls;filetype=excel");
22 Response.ContentEncoding = การเข้ารหัส GetEncoding("utf-8");
23 การตอบสนองเขียน(sb.ToString());
24 การตอบสนอง.ฟลัช();
25 การตอบสนอง สิ้นสุด();
26}
27 // เพิ่มเซลล์ส่วนขยาย
28 สตริงส่วนตัว GetExCells(int num)
29 {
30 StringBuilder sb = StringBuilder ใหม่ (200);
31 สำหรับ (int i = 0; i < num; i++)
32 sb.ผนวก("<TD></TD>");
33 กลับ sb.ToString();
34}
35 // เพิ่มแถวส่วนขยาย.
36 สตริงส่วนตัว GetExRows (int rowNum, int colNum)
37 {
38 StringBuilder sb = StringBuilder ใหม่ (200);
39 สำหรับ (int i = 0; i < rowNum; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 กลับ sb.ToString();
42 }
c) วิธีอินเทอร์เฟซทั่วไป: ส่วนใหญ่สร้างไฟล์ Excel โดยการเรียกส่วนประกอบอินเทอร์เฟซ Microsoft.Office.Interop.Excel ที่ Office จัดทำขึ้น คุณลักษณะของมันคือสามารถขจัดปัญหาความครอบคลุมของเซลล์เนื้อหาที่ไม่สมบูรณ์และยังสามารถขจัดปัญหาของ รูปแบบพรอมต์การเปิดที่ผิดปกติ แต่สำหรับกรณีของการดำเนินการไฟล์ผ่าน OleDB จะต้องเขียนด้วยวิธีที่ค่อนข้างเข้มงวด มิฉะนั้น จะเกิดปัญหากับรูปแบบที่ผิดปกติระหว่างการดำเนินการ ต่อไปนี้เป็นวิธีการเขียนมาตรฐาน:
1 โมฆะส่วนตัว Test4()
2 {
filePath 3 สาย = @"C:Test.xls";
4 รายการ <DataContent> arrDatas = รายการใหม่ <DataContent>() {
5 DataContent ใหม่ () { ที่อยู่ = "aaa", ชื่อ = "aaa", โทรศัพท์ = "aaa" },
6 DataContent ใหม่ () { ที่อยู่ = "bbb", โทรศัพท์ = "bbb", ชื่อ = "bbb" },
7 DataContent ใหม่ () { ชื่อ = "ccc", โทรศัพท์ = "ccc", ที่อยู่ = "ccc"}
8};
9
10 วัตถุ objOpt = System.Reflection.Missing.Value;
11 Excel แอปพลิเคชัน objExcel = null;
12 Excel.Workbooks objBooks = null;
13 Excel.Workbook objBook = null;
14 พยายาม
15 {
16 พยายาม
17 {
18 objExcel = ใหม่ Excel.Application();
19}
20 จับ (ยกเว้นตัวอย่าง)
ยี่สิบเอ็ด {
22 Console.Write (เช่นข้อความ);
ยี่สิบสาม }
ยี่สิบสี่
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.สมุดงาน)(objBooks.Add(objOpt));
27 // เพิ่มข้อมูลลงในเซลล์ของแผ่นงานแรกในสมุดงานใหม่
28 Excel.Sheets objSheets = (Excel.Sheets)objBook.แผ่นงาน;
29 Excel.แผ่นงาน objSheet = (Excel.แผ่นงาน)(objSheets.get_Item(1));
30 objSheet.Name = "รายการข้อมูล";
31 objSheet.Cells[1, 1] = "ชื่อ";
32 objSheet.Cells[1, 2] = "ที่อยู่";
33 objSheet.Cells[1, 3] = "โทรศัพท์";
34 Excel.Range objRange = objSheet.get_Range(objSheet.Cells[1, 1], objSheet.Cells[1, 3]);
35 //objRange.Font.Bold = จริง;
36 objRange.Font.Size = 18;
37 objRange.Interior.ColorIndex = 37;
38
39 สำหรับ (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 สำหรับ (int j = 0; j < arrDatas.Count; j++)
44 objSheet.Cells[2 + j, i] = arrDatas[j].GetContentByIndex(i);
45 }
46 objSheet.Columns.ปรับพอดีอัตโนมัติ();
47 ถ้า (System.IO.File.Exists (filePath))
48 System.IO.File.Delete (เส้นทางไฟล์);
49 // บันทึกไฟล์.
50 objBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, objOpt, objOpt,
51 objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
52 objOpt, objOpt, objOpt, objOpt, objOpt);
53 objBook.Close(เท็จ, objOpt, objOpt);
54 objExcel.เลิก();
55 objExcel = โมฆะ;
56 GC.รวบรวม();
57 //ตอบกลับไฟล์ไปยังไคลเอนต์
58 สตริง 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("การจัดการเนื้อหา", "ไฟล์แนบ; filename=" + downloadFileName + ";filetype=excel");
62 Response.ContentEncoding = การเข้ารหัส GetEncoding("utf-8");
63 การตอบสนอง WriteFile (เส้นทางไฟล์);
64 การตอบสนอง.ฟลัช();
65
66 ถ้า (System.IO.File.Exists (filePath))
67 System.IO.File.Delete(เส้นทางไฟล์);
68 การตอบสนองสิ้นสุด();
69 }
70 จับ (ยกเว้นตัวอย่าง)
71 {
72 ถ้า (objExcel != null)
73 {
74 ลอง
75 {
76 foreach (Excel.Workbook wb ใน objExcel.Workbooks)
77 {
78 ถ้า (wb != null)
79 {
80 ลอง
81 {
82 wb.Saved = จริง;
83}
84 จับ { }
85}
86}
87 objExcel.Workbooks.ปิด();
88 objExcel.เลิก();
89 objExcel = โมฆะ;
90 GC.รวบรวม();
91 }
92 จับ { }
93}
94}
95 }
96
-