Usar C # para generar documentos de Excel en la aplicación, e incluso proporcionar una función de descarga directa, es una aplicación relativamente común. Aquí registro varios métodos que encontré, y hay algunas cosas que requieren atención:
a) Primero defina una clase de datos:
código
Contenido de datos de clase pública
{
Nombre de cadena pública {conjunto; obtener}
Dirección de cadena pública {conjunto; obtener}
cadena pública Teléfono {conjunto; obtener}
cadena pública GetContentByIndex (índice int)
{
Valor de cadena = cadena.Vacío;
cambiar (índice)
{
caso 1:
Valor = Nombre;
romper;
caso 2:
Valor = Dirección;
romper;
caso 3:
Valor = Teléfono;
romper;
por defecto:
Valor = "";
romper;
}
valor de retorno;
}
}
b) El método más simple: generar archivos Excel directamente uniendo cadenas HTML. Las ventajas son: el código es muy conveniente y puede funcionar sin ninguna extensión de interfaz de Office; la desventaja es: las celdas cubiertas son limitadas, aunque se puede configurar; un método intermedio, pero todavía hay un problema de formato incorrecto al abrir, lo que no afecta la navegación y edición normales. Sin embargo, para algunas aplicaciones que necesitan operar archivos de Excel a través de código, puede encontrar problemas, como al leer el contenido. Ole DB.
1 vacío público GetExcelDataToClient()
2 {
3 Lista<Contenido de datos> arrDatas = nueva Lista<Contenido de datos>() {
4 nuevos DataContent() { Dirección="aaa", Nombre="aaa", Teléfono="aaa" },
5 nuevos DataContent() { Dirección="bbb", Teléfono="bbb", Nombre="bbb" },
6 nuevos DataContent() { Nombre="ccc", Teléfono="ccc", Dirección="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="Tipo de contenido" content="text/html; charset=gb_2312-80 "><TITLE></TITLE><style>td{mso-number-format:" \@";}</style></HEAD><BODY><TABLE border="1"> ", 500);
10 // columnas de título.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Asistió </B></TD>{0}</TR>", GetExCells(30)));
12 // columnas de contenido.
13 foreach (datos de contenido de datos en arrDatas)
14 sb.Append(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR> ", datos.Nombre, datos.Dirección, datos.Teléfono, GetExCells(30)));
15 // agregar filas de extensión.
16 sb.Append(GetExRows(50, 33));
17 // última parte.
18 sb.Append("</TABLE></BODY></HTML>");
19 // responde el resultado como un archivo excel.
20 Response.ContentType = "aplicación/vnd.ms-excel";
21 Response.AddHeader("Disposición de contenido", "adjunto; nombre de archivo=DataList.xls;tipo de archivo=excel");
22 Response.ContentEncoding = Codificación.GetEncoding("utf-8");
23 Respuesta.Write(sb.ToString());
24 Respuesta.Flush();
25 Respuesta.End();
26}
27 // agrega las celdas de extensión.
28 cadena privada GetExCells (int num)
29 {
30 StringBuilder sb = nuevo StringBuilder(200);
31 para (int i = 0; i < núm; i++)
32 sb.Append("<TD></TD>");
33 retorno sb.ToString();
34}
35 // agrega las filas de extensión.
36 cadena privada GetExRows (int filaNum, int colNum)
37 {
38 StringBuilder sb = nuevo StringBuilder(200);
39 para (int i = 0; i < numfila; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 retorno sb.ToString();
42 }
c) Método de interfaz general: genera principalmente archivos de Excel llamando al componente de interfaz Microsoft.Office.Interop.Excel proporcionado por Office. Su característica es que puede eliminar el problema de la cobertura incompleta de las celdas de contenido y también puede eliminar el problema de. Formato de solicitud de apertura anormal, pero para el caso de operar archivos a través de OleDB, debe escribirse de una manera relativamente estricta; de lo contrario, habrá problemas con anomalías de formato durante la operación. El siguiente es el método de escritura estándar:
1 vacío privado Test4()
2 {
3 cadenas filePath = @"C:Test.xls";
4 Lista<Contenido de datos> arrDatas = nueva Lista<Contenido de datos>() {
5 nuevos DataContent() { Dirección="aaa", Nombre="aaa", Teléfono="aaa" },
6 nuevos DataContent() { Dirección="bbb", Teléfono="bbb", Nombre="bbb" },
7 nuevos contenidos de datos() { Nombre="ccc", Teléfono="ccc", Dirección="ccc"}
8};
9
10 objeto objOpt = System.Reflection.Missing.Value;
11 Excel.Aplicación objExcel = null;
12 Excel.Workbooks objBooks = null;
13 Excel.Workbook objBook = nulo;
14 intento
15 {
16 intento
17 {
18 objExcel = nuevo Excel.Aplicación();
19}
20 capturas (Excepción ex)
veintiuno {
22 Consola.Escribir(ex.Mensaje);
veintitrés }
veinticuatro
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // Agregue datos a las celdas de la primera hoja de trabajo en el nuevo libro.
28 Excel.Hojas objSheets = (Excel.Hojas)objBook.Worksheets;
29 Excel.Worksheet objSheet = (Excel.Worksheet)(objSheets.get_Item(1));
30 objSheet.Name = "Lista de datos";
31 objSheet.Cells[1, 1] = "Nombre";
32 objSheet.Cells[1, 2] = "Dirección";
33 objSheet.Cells[1, 3] = "Teléfono";
34 Excel.Range objRange = objSheet.get_Range(objSheet.Cells[1, 1], objSheet.Cells[1, 3]);
35 //objRange.Font.Bold = verdadero;
36 objRange.Font.Size = 18;
37 objRange.Interior.ColorIndex = 37;
38
39 para (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 para (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 // Guarda el archivo.
50 objBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, objOpt, objOpt,
51 objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
52 objOpt, objOpt, objOpt, objOpt, objOpt);
53 objBook.Close(falso, objOpt, objOpt);
54 objExcel.Salir();
55 objExcel = nulo;
56 GC.Recoger();
57 //Responder el archivo al cliente.
58 cadenas downloadFileName = string.Format("{0:yyyyMMdd}", DateTime.Now) + "-" +
59 esta.Página.Usuario.Identidad.Nombre + "-DataList.xls";
60 Response.ContentType = "aplicación/vnd.ms-excel";
61 Response.AddHeader("Content-Disposition", "attachment; filename=" + downloadFileName + ";filetype=excel");
62 Response.ContentEncoding = Codificación.GetEncoding("utf-8");
63 Respuesta.WriteFile(filePath);
64 Respuesta.Flush();
65
66 si (System.IO.File.Exists (filePath))
67 System.IO.File.Delete(filePath);
68 Respuesta.End();
69 }
70 capturas (Excepción ex)
71 {
72 si (objExcel! = nulo)
73 {
74 intento
75 {
76 foreach (Excel.Workbook wb en objExcel.Workbooks)
77 {
78 si (wb! = nulo)
79 {
80 intento
81 {
82 wb.Guardado = verdadero;
83}
84 captura {}
85}
86}
87 objExcel.Workbooks.Close();
88 objExcel.Salir();
89 objExcel = nulo;
90 GC.Recoger();
91 }
92 captura {}
93}
94}
95 }
96
-