يعد استخدام C# لإنشاء مستندات Excel في التطبيق، وحتى توفير وظيفة التنزيل المباشر، تطبيقًا شائعًا نسبيًا، وهنا أسجل عدة طرق واجهتها، وهناك بعض الأشياء التي تحتاج إلى الاهتمام:
أ) حدد أولاً فئة البيانات:
شفرة
محتوى البيانات من الفئة العامة
{
اسم السلسلة العامة {مجموعة؛
عنوان السلسلة العامة {مجموعة؛
سلسلة الهاتف العامة {احصل عليها}
سلسلة عامة GetContentByIndex(مؤشر int)
{
قيمة السلسلة = سلسلة. فارغة؛
التبديل (الفهرس)
{
الحالة 1:
القيمة = الاسم؛
استراحة؛
الحالة 2:
القيمة = العنوان؛
استراحة؛
الحالة 3:
القيمة = الهاتف؛
استراحة؛
تقصير:
القيمة = ""؛
استراحة؛
}
قيمة الإرجاع؛
}
}
ب) الطريقة الأبسط: إنشاء ملفات Excel مباشرة عن طريق تجميع سلاسل HTML معًا. المزايا هي: الكود ملائم للغاية ويمكن أن يعمل بدون أي ملحق لواجهة المكتب. العيب هو: الخلايا المغطاة محدودة، على الرغم من إمكانية ضبطها طريقة متوسطة، ولكن لا تزال هناك مشكلة التنسيق غير الصحيح عند الفتح، مما لا يؤثر على التصفح والتحرير العادي، ومع ذلك، بالنسبة لبعض التطبيقات التي تحتاج إلى تشغيل ملفات Excel من خلال التعليمات البرمجية، قد تواجه مشكلات، مثل عند قراءة المحتوى من خلالها أولي دي بي.
1 الفراغ العام GetExcelDataToClient()
2 {
3 List<DataContent> arrDatas = قائمة جديدة<DataContent>() {
4 DataContent() جديدة { العنوان = "aaa"، الاسم = "aaa"، الهاتف = "aaa" }،
5 DataContent() جديدة { Address="bbb"، Phone="bbb"، الاسم = "bbb" }،
6 DataContent() الجديدة { Name="ccc"، Phone="ccc"، العنوان = "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 // أعمدة العنوان.
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.Append(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.Append(GetExRows(50, 33));
17//الجزء الأخير.
18 sb.Append("</TABLE></BODY></HTML>");
19 // الرد على النتيجة كملف اكسل .
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 استجابة. فلوش ()؛
25 استجابة. نهاية ()؛
26}
27 // إضافة خلايا الامتداد.
28 سلسلة خاصة GetExCells(int num)
29 {
30 StringBuilder sb = new StringBuilder(200);
31 لـ (int i = 0; i < num; i++)
32 sb.Append("<TD></TD>");
33 return sb.ToString();
34}
35 // إضافة صفوف الامتداد.
36 سلسلة خاصة GetExRows (introwNum، int colNum)
37 {
38 StringBuilder sb = new StringBuilder(200);
39 لـ (int i = 0; i <rowNum; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 return sb.ToString();
42 }
ج) طريقة الواجهة العامة: يتم إنشاء ملفات Excel بشكل أساسي عن طريق استدعاء مكون الواجهة Microsoft.Office.Interop.Excel الذي يوفره Office، وتتمثل خصائصه في أنه يمكنه التخلص من مشكلة التغطية غير الكاملة لخلايا المحتوى، ويمكنه أيضًا التخلص من مشكلة تنسيق موجه غير طبيعي، ولكن في حالة تشغيل الملفات من خلال OleDB، يجب كتابتها بطريقة صارمة نسبيًا، وإلا ستكون هناك مشاكل في التنسيق غير الطبيعي أثناء العملية، وفيما يلي طريقة الكتابة القياسية:
1 اختبار باطل خاص 4 ()
2 {
3 سلسلة filePath = @"C:Test.xls";
4 List<DataContent> arrDatas = قائمة جديدة<DataContent>() {
5 DataContent () جديدة { Address = "aaa"، الاسم = "aaa"، الهاتف = "aaa" }،
6 DataContent() { Address="bbb"، Phone="bbb"، الاسم = "bbb" }،
7 DataContent () جديد { Name = "ccc"، Phone = "ccc"، العنوان = "ccc"}
8 };
9
10 كائن objOpt = System.Reflection.Missing.Value؛
11 Excel.Application objExcel = null;
12 Excel.Workbooks objBooks = null;
13 Excel.Workbook objBook = null;
14 محاولة
15 {
16 محاولة
17 {
18 objExcel = new Excel.Application();
19}
20 صيدًا (استثناء على سبيل المثال)
واحد وعشرون {
22 Console.Write(ex.Message);
ثلاثة وعشرين }
أربعة وعشرون
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // إضافة البيانات إلى خلايا ورقة العمل الأولى في المصنف الجديد.
28 Excel.Sheets objSheets = (Excel.Sheets)objBook.Worksheets;
29 Excel.Worksheet objSheet = (Excel.Worksheet)(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 = true;
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.AutoFit();
47 إذا (System.IO.File.Exists(filePath))
48 System.IO.File.Delete(filePath);
49 // احفظ الملف.
50 objBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, objOpt, objOpt,
51 أوبجوبت، أوبجوبت، إكسيل.XlSaveAsAccessMode.xlNoChange،
52 objOpt, objOpt, objOpt, objOpt, objOpt);
53 objBook.Close(false, objOpt, objOpt);
54 objExcel.Quit();
55 objExcel = null;
56 جي سي.جمع();
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("Content-Disposition", "attachment; filename=" + downloadFileName + ";filetype=excel");
62 Response.ContentEncoding = Encoding.GetEncoding("utf-8");
63 Response.WriteFile(filePath);
64 استجابة. فلوش ()؛
65
66 إذا (System.IO.File.Exists(filePath))
67 System.IO.File.Delete(filePath);
68 استجابة. نهاية ()؛
69 }
70 صيدًا (استثناء على سبيل المثال)
71 {
72 إذا (objExcel != فارغة)
73 {
74 محاولة
75 {
76 foreach (Excel.Workbook wb في objExcel.Workbooks)
77 {
78 إذا (wb ! = فارغ)
79 {
80 محاولة
81 {
82 wb.Saved = صحيح؛
83}
84 صيد { }
85}
86}
87 objExcel.Workbooks.Close();
88 objExcel.Quit();
89 objExcel = null;
90 جي سي.جمع();
91 }
92 صيد { }
93}
94}
95 }
96
-