Usar C# para gerar documentos Excel na aplicação, e até fornecer uma função de download direto, é uma aplicação relativamente comum. Aqui registro vários métodos que encontrei, e há algumas coisas que precisam de atenção:
a) Primeiro defina uma classe de dados:
código
classe pública DataContent
{
string pública Nome {conjunto;
endereço de string pública {conjunto;
string pública Telefone {configurar;
string pública GetContentByIndex(índice int)
{
string Valor = string.Empty;
mudar (índice)
{
caso 1:
Valor = Nome;
quebrar;
caso 2:
Valor = Endereço;
quebrar;
caso 3:
Valor = Telefone;
quebrar;
padrão:
Valor = "";
quebrar;
}
valor de retorno;
}
}
b) O método mais simples: gerar arquivos Excel diretamente reunindo strings HTML. As vantagens são: o código é muito conveniente e pode funcionar sem qualquer extensão de interface de escritório. A desvantagem é: as células cobertas são limitadas, embora possam ser configuradas através; um método intermediário, mas ainda há um problema de formato incorreto ao abrir, o que não afeta a navegação e edição normais. Porém, para alguns aplicativos que precisam operar arquivos Excel por meio de código, você pode encontrar problemas, como ao ler o conteúdo por meio de código. OleDB.
1 GetExcelDataToClient() vazio público
2 {
3 List<DataContent> arrDatas = new List<DataContent>() {
4 novos DataContent() { Address="aaa", Name="aaa", Phone="aaa" },
5 novos DataContent() { Address="bbb", Phone="bbb", Name="bbb" },
6 novos 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 // colunas de título.
11 sb.Append(string.Format("<TR><TD><B>Event_CourseId<B/></TD><TD><B>UserId</B></TD><TD><B>Participado </B></TD>{0}</TR>", GetExCells(30)));
12 // colunas de conteúdo.
13 foreach (dados DataContent em arrDatas)
14 sb.Append(string.Format("<TR><TD>{0}</TD><TD>{1}</TD><TD>{2}</TD>{3}</TR> ", dados.Nome, dados.Endereço, dados.Telefone, GetExCells(30)));
15 // adiciona linhas de extensão.
16sb.Append(GetExRows(50, 33));
17 // última parte.
18 sb.Append("</TABLE></BODY></HTML>");
19 // responde o resultado como um arquivo Excel.
20 Response.ContentType = "aplicativo/vnd.ms-excel";
21 Response.AddHeader("Disposição de conteúdo", "anexo; nome do arquivo=DataList.xls;tipo de arquivo=excel");
22 Response.ContentEncoding = Encoding.GetEncoding("utf-8");
23 Response.Write(sb.ToString());
24 Response.Flush();
25 Response.End();
26}
27 // adicione as células de extensão.
28 string privada GetExCells(int num)
29 {
30 StringBuilder sb = new StringBuilder(200);
31 para (int i = 0; i <num; i++)
32 sb.Append("<TD></TD>");
33 return sb.ToString();
34}
35 // adiciona as linhas de extensão.
36 string privada GetExRows(int rowNum, int colNum)
37 {
38 StringBuilder sb = new StringBuilder(200);
39 para (int i = 0; i < rowNum; i++)
40 sb.Append(string.Format("<TR>{0}</TR>", GetExCells(colNum)));
41 return sb.ToString();
42}
c) Método de interface geral: gera principalmente arquivos Excel chamando o componente de interface Microsoft.Office.Interop.Excel fornecido pelo Office. Sua característica é que pode eliminar o problema de cobertura incompleta das células de conteúdo, podendo também eliminar o problema de. formato de prompt de abertura anormal, mas para o caso de operação de arquivos por meio do OleDB, ele deve ser escrito de forma relativamente estrita, caso contrário, haverá problemas com anormalidades de formato durante a operação.
1 teste vazio privado4()
2 {
3 string filePath = @"C:Test.xls";
4 List<DataContent> arrDatas = new List<DataContent>() {
5 novos DataContent() { Address="aaa", Name="aaa", Phone="aaa" },
6 novo DataContent() { Address="bbb", Phone="bbb", Name="bbb" },
7 novo DataContent() { Nome="ccc", Telefone="ccc", Endereço="ccc"}
8};
9
10 objeto objOpt = System.Reflection.Missing.Value;
11 Excel.Aplicativo objExcel = null;
12 Excel.Workbooks objBooks = null;
13 Excel.Workbook objBook = null;
14 tentativa
15 {
16 tentativas
17 {
18 objExcel = new Excel.Application();
19}
20 capturas (Exceção ex)
vinte e um {
22 Console.Write(ex.Mensagem);
vinte e três }
vinte e quatro
25 objBooks = (Excel.Workbooks)objExcel.Workbooks;
26 objBook = (Excel.Workbook)(objBooks.Add(objOpt));
27 // Adiciona dados às células da primeira planilha da nova pasta de trabalho.
28 Excel.Planilhas objSheets = (Excel.Planilhas)objBook.Worksheets;
29 Excel.Planilha objSheet = (Excel.Planilha)(objSheets.get_Item(1));
30 objSheet.Name = "DataList";
31 objSheet.Cells[1, 1] = "Nome";
32 objSheet.Cells[1, 2] = "Endereço";
33 objSheet.Cells[1, 3] = "Telefone";
34 Excel.Range objRange = objSheet.get_Range(objSheet.Cells[1, 1], objSheet.Cells[1, 3]);
35 //objRange.Font.Bold = verdadeiro;
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 se (System.IO.File.Exists(filePath))
48 System.IO.File.Delete(filePath);
49 // Salve o arquivo.
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.Quit();
55 objExcel = nulo;
56 GC.Collect();
57 //Responde o arquivo ao cliente.
58 string downloadFileName = string.Format("{0:yyyyMMdd}", DateTime.Now) + "-" +
59 this.Page.User.Identity.Name + "-DataList.xls";
60 Response.ContentType = "aplicativo/vnd.ms-excel";
61 Response.AddHeader("Disposição de conteúdo", "anexo; nome do arquivo = " + downloadFileName + "; tipo de arquivo = excel");
62 Response.ContentEncoding = Encoding.GetEncoding("utf-8");
63 Response.WriteFile(filePath);
64 Response.Flush();
65
66 se (System.IO.File.Exists(filePath))
67 System.IO.File.Delete(filePath);
68 Response.End();
69}
70 captura (Exceção ex)
71 {
72 se (objExcel! = nulo)
73 {
74 tentar
75 {
76 foreach (Excel.Workbook wb em objExcel.Workbooks)
77 {
78 se (wb! = nulo)
79 {
80 tentativas
81 {
82 wb.Salvo = verdadeiro;
83}
84 pegar { }
85}
86}
87 objExcel.Workbooks.Close();
88 objExcel.Quit();
89 objExcel = null;
90 GC.Collect();
91}
92 pegar { }
93}
94}
95}
96
-