Использование C# для генерации документов Excel в приложении и даже предоставления прямой загрузки, является относительно распространенным применением.
а) Сначала определите класс данных:
код
Общедоступный класс DataContent
{
public String name {set;
public String Address {set;
public String Phone {set;
public String getContentbyIndex (int index)
{
string value = string.empty;
переключатель (индекс)
{
случай 1:
Значение = имя;
перерыв;
случай 2:
Значение = адрес;
перерыв;
случай 3:
Значение = телефон;
перерыв;
по умолчанию:
Value = "";
перерыв;
}
возвращаемое значение;
}
}
B) Простейший метод: сгенерировать файлы Excel непосредственно, соединяя HTML -строки. Промежуточный метод, но при открытии все еще существует проблема неверного формата, который не влияет на нормальное просмотр и редактирование. Oledb.
1 public void getExceldatatoclient ()
2 {
3 List <datacontent> arrdatas = new List <TanaContent> () {
4 new DataContent () {Address = "aaa", name = "aaa", phone = "aaa"},
5 new DataContent () {Adder = "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 // заголовка столбцов.
11 sb.append (string.format ("<tr> <td> <b> event_courseid <b/> </td> <td> <b> userId </b> </td> <td> <b> </B> </td> {0} </tr> ", getExcells (30)));
12 // Столбцы содержимого.
13 Foreach (данные обработки данных в 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 // Ответ Результат в качестве файла Excel.
20 response.contentType = "Application/vnd.ms-excel";
21 response.addheader ("content-disposition", "Attactment; 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 // Добавить ячейки разгибания.
28 частная строка getExcells (int num)
29 {
30 StringBuilder SB = New StringBuilder (200);
31 для (int i = 0; i <num; i ++)
32 sb.append ("<td> </td>");
33 вернуть sb.toString ();
34}
35 // Добавить ряды расширения.
36 частная строка getExrows (int rownum, 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 вернуть sb.toString ();
42 }
C) Метод общего интерфейса: в основном генерируйте файлы Excel, вызывая интерфейсную компонент Microsoft.office.interop.excel, предоставленную Office. Аномальный формат открытия.
1 Private Void Test4 ()
2 {
3 String filePath = @"c: test.xls";
4 List <datacontent> arrdatas = new List <datacontent> () {
5 New DataContent () {Addic = "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 Object objopt = System.Reflection.missing.value;
11 Excel.application objexcel = null;
12 Excel.wooks objbooks = null;
13 Excel.workbook objbook = null;
14 Попробуй
15 {
16 Попробуй
17 {
18 objexcel = new Excel.application ();
19}
20 поймать (исключение Ex)
двадцать один {
22 console.write (ex.message);
двадцать три }
двадцать четыре
25 objbooks = (Excel.Workbooks) objexcel.wookbooks;
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 = "datalist";
31 objsheet.cells [1, 1] = "name";
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 if (system.io.file.exists (filepath))
48 System.io.file.delete (filePath);
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 (false, objopt, objopt);
54 objexcel.quit ();
55 objexcel = null;
56 gc.collect ();
57 // Ответ файл на клиент.
58 string downloadfilename = string.format ("{0: yyyymmdd}", datetime.now) + "-" +
59 this.page.user.identity.name + "-datalist.xls";
60 response.contenttype = "Приложение/Vnd.ms-Excel";
61 response.addheader ("Контент-дискуссия", "Attactment; 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 Catch (Exception Ex)
71 {
72 if (objexcel! = Null)
73 {
74 Попробуй
75 {
76 Foreach (Excel.Workbook WB в objexcel.wookbooks)
77 {
78 if (wb! = Null)
79 {
80 Попробуй
81 {
82 wb.saved = true;
83}
84 поймать {}
85}
86}
87 objexcel.workbooks.close ();
88 objexcel.quit ();
89 objexcel = null;
90 gc.collect ();
91 }
92 поймать {}
93}
94}
95 }
96
-