一说到导出excel可能很多人都会觉得说直接利用npoi 导入导出excel格式的文件,那样非常方便,但是可能有些时候有的浏览器不支持,那么该怎么办呢,现在介绍一种纯C#的导出excel的方法,代码如下:
1 public void excel_output1(DataTable dt) 2 { 3 Response.Clear(); 4 5 Response.Buffer = true; 6 7 Response.Charset = "utf-8 "; 8 Response.AddHeader("Content-Disposition", "attachment;filename=" + 9 HttpUtility.UrlEncode(DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", System.Text.Encoding.UTF8)); 10 Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); 11 Response.ContentType = "application/ms-excel"; 12 this.EnableViewState = false; 13 System.IO.StringWriter sw = new System.IO.StringWriter(); 14 15 sw.WriteLine("<?xml version="1.0"?>"); 16 sw.WriteLine("<?mso-application progid="Excel.Sheet"?>"); 17 sw.WriteLine("<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet""); 18 sw.WriteLine(" xmlns:o="urn:schemas-microsoft-com:office:office""); 19 sw.WriteLine(" xmlns:x="urn:schemas-microsoft-com:office:excel""); 20 sw.WriteLine(" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet""); 21 sw.WriteLine(" xmlns:html="http://www.w3.org/TR/REC-html40">"); 22 sw.WriteLine(" <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">"); 23 sw.WriteLine(" <Created>1996-12-17T01:32:42Z</Created>"); 24 sw.WriteLine(" <LastSaved>2011-05-29T05:59:50Z</LastSaved>"); 25 sw.WriteLine(" <Version>11.6360</Version>"); 26 sw.WriteLine(" </DocumentProperties>"); 27 sw.WriteLine(" <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">"); 28 sw.WriteLine(" <RemovePersonalInformation/>"); 29 sw.WriteLine(" </OfficeDocumentSettings>"); 30 sw.WriteLine(" <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">"); 31 sw.WriteLine(" <WindowHeight>4530</WindowHeight>"); 32 sw.WriteLine(" <WindowWidth>8505</WindowWidth>"); 33 sw.WriteLine(" <WindowTopX>480</WindowTopX>"); 34 sw.WriteLine(" <WindowTopY>120</WindowTopY>"); 35 sw.WriteLine(" <AcceptLabelsInFormulas/>"); 36 sw.WriteLine(" <ProtectStructure>False</ProtectStructure>"); 37 sw.WriteLine(" <ProtectWindows>False</ProtectWindows>"); 38 sw.WriteLine(" </ExcelWorkbook>"); 39 sw.WriteLine(" <Styles>"); 40 sw.WriteLine(" <Style ss:ID="Default" ss:Name="Normal">"); 41 sw.WriteLine(" <Alignment ss:Vertical="Bottom"/>"); 42 sw.WriteLine(" <Borders/>"); 43 sw.WriteLine(" <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>"); 44 sw.WriteLine(" <Interior/>"); 45 sw.WriteLine(" <NumberFormat/>"); 46 sw.WriteLine(" <Protection/>"); 47 sw.WriteLine(" </Style>"); 48 sw.WriteLine(" <Style ss:ID="s28">"); 49 sw.WriteLine(" <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>"); 50 sw.WriteLine(" <Borders>"); 51 sw.WriteLine(" <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>"); 52 sw.WriteLine(" <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>"); 53 sw.WriteLine(" <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>"); 54 sw.WriteLine(" <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>"); 55 sw.WriteLine(" </Borders>"); 56 sw.WriteLine(" </Style>"); 57 sw.WriteLine(" <Style ss:ID="s29">"); 58 sw.WriteLine(" <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>"); 59 sw.WriteLine(" <Borders>"); 60 sw.WriteLine(" <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>"); 61 sw.WriteLine(" <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>"); 62 sw.WriteLine(" <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>"); 63 sw.WriteLine(" <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>"); 64 sw.WriteLine(" </Borders>"); 65 sw.WriteLine(" </Style>"); 66 sw.WriteLine(" <Style ss:ID="s31">"); 67 sw.WriteLine(" <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>"); 68 sw.WriteLine(" <Borders>"); 69 sw.WriteLine(" <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>"); 70 sw.WriteLine(" <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>"); 71 sw.WriteLine(" <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>"); 72 sw.WriteLine(" <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>"); 73 sw.WriteLine(" </Borders>"); 74 sw.WriteLine(" <Font ss:FontName="宋体" x:CharSet="134" ss:Size="24" ss:Bold="1"/>"); 75 sw.WriteLine(" </Style>"); 76 sw.WriteLine(" <Style ss:ID="s32">"); 77 sw.WriteLine(" <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>"); 78 sw.WriteLine(" <Borders>"); 79 sw.WriteLine(" <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>"); 80 sw.WriteLine(" <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>"); 81 sw.WriteLine(" <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>"); 82 sw.WriteLine(" <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>"); 83 sw.WriteLine(" </Borders>"); 84 sw.WriteLine(" <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12" ss:Bold="1"/>"); 85 sw.WriteLine(" </Style>"); 86 sw.WriteLine(" <Style ss:ID="s33">"); 87 sw.WriteLine(" <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>"); 88 sw.WriteLine(" <Borders>"); 89 sw.WriteLine(" <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>"); 90 sw.WriteLine(" <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>"); 91 sw.WriteLine(" <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>"); 92 sw.WriteLine(" <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>"); 93 sw.WriteLine(" </Borders>"); 94 sw.WriteLine(" <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12" ss:Bold="1"/>"); 95 sw.WriteLine(" </Style>"); 96 sw.WriteLine(" </Styles>"); 97 sw.WriteLine(" <Worksheet ss:Name="Sheet1">"); 98 //sw.WriteLine(" <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="9" x:FullColumns="1""); 99 100 string dt_str = "<Table ss:ExpandedColumnCount="13" ss:ExpandedRowCount=""; 101 int dt_rCount = dt.Rows.Count + 5; 102 dt_str += dt_rCount.ToString() + "" x:FullColumns="1""; 103 sw.WriteLine(dt_str); 104 105 106 sw.WriteLine(" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">"); 107 108 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="93.75"/>"); 109 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="111.75" ss:Span="1"/>"); 110 sw.WriteLine(" <Column ss:Index="4" ss:AutoFitWidth="0" ss:Width="102"/>"); 111 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="135.75" ss:Span="3"/>"); 112 sw.WriteLine(" <Column ss:Index="9" ss:AutoFitWidth="0" ss:Width="183.75"/>"); 113 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="63.75"/>"); 114 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="183.75"/>"); 115 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="63.75"/>"); 116 sw.WriteLine(" <Column ss:AutoFitWidth="0" ss:Width="163.75"/>"); 117 sw.WriteLine(" <Row ss:Index="2">"); 118 sw.WriteLine(" <Cell ss:MergeAcross="12" ss:MergeDown="2" ss:StyleID="s31"><Data"); 119 sw.WriteLine(" ss:Type="String">回访详单</Data></Cell>"); 120 sw.WriteLine(" </Row>"); 121 sw.WriteLine(" <Row ss:Index="5">"); 122 sw.WriteLine(" <Cell ss:StyleID="s32"><Data ss:Type="String">营业区</Data></Cell>"); 123 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">任务总数</Data></Cell>"); 124 sw.WriteLine(" <Cell ss:StyleID="s32"><Data ss:Type="String">明确表示不使用</Data></Cell>"); 125 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">迁移无线</Data></Cell>"); 126 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">改网通</Data></Cell>"); 127 sw.WriteLine(" <Cell ss:StyleID="s32"><Data ss:Type="String">改电信</Data></Cell>"); 128 sw.WriteLine(" <Cell ss:StyleID="s32"><Data ss:Type="String">联系不上的1个月以上无上网记录</Data></Cell>"); 129 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">联系不上有上网记录</Data></Cell>"); 130 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">对网络不满意</Data></Cell>"); 131 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">对服务不满意</Data></Cell>"); 132 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">考虑中</Data></Cell>"); 133 sw.WriteLine(" <Cell ss:StyleID="s33"><Data ss:Type="String">已续费</Data></Cell>"); 134 sw.WriteLine(" </Row>"); 135 136 int cs_i = 1; 137 DataRow[] dt_myRow = dt.Select(""); 138 139 foreach (DataRow dt_row in dt_myRow) 140 { 141 sw.WriteLine(" <Row>"); 142 143 sw.WriteLine(" <Cell ss:StyleID="s29"><Data ss:Type="String">" + dt_row[0].ToString() + "</Data></Cell>"); 144 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[1].ToString() + "</Data></Cell>"); 145 sw.WriteLine(" <Cell ss:StyleID="s29"><Data ss:Type="String">" + dt_row[2].ToString() + "</Data></Cell>"); 146 sw.WriteLine(" <Cell ss:StyleID="s29"><Data ss:Type="String">" + dt_row[2].ToString() + "</Data></Cell>"); 147 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[4].ToString() + "</Data></Cell>"); 148 sw.WriteLine(" <Cell ss:StyleID="s29"><Data ss:Type="String">" + dt_row[5].ToString() + "</Data></Cell>"); 149 sw.WriteLine(" <Cell ss:StyleID="s29"><Data ss:Type="String">" + dt_row[6].ToString() + "</Data></Cell>"); 150 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[7].ToString() + "</Data></Cell>"); 151 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[8].ToString() + "</Data></Cell>"); 152 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[9].ToString() + "</Data></Cell>"); 153 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[10].ToString() + "</Data></Cell>"); 154 sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[11].ToString() + "</Data></Cell>"); 155 //sw.WriteLine(" <Cell ss:StyleID="s28"><Data ss:Type="String">" + dt_row[12].ToString() + "</Data></Cell>"); 156 sw.WriteLine(" </Row>"); 157 cs_i++; 158 } 159 160 161 162 //sw.WriteLine(" <Row>"); 163 //sw.WriteLine(" <Cell ss:MergeAcross="5" ss:StyleID="s33"><Data ss:Type="String">合计</Data></Cell>"); 164 //sw.WriteLine(" <Cell ss:StyleID="s32" ss:Formula="=SUM(OFFSET(INDIRECT(ADDRESS(ROW(),COLUMN())),6-ROW(),0,ROW()-6,1))"><Data ss:Type="Number">1</Data></Cell>"); 165 //sw.WriteLine(" <Cell ss:MergeAcross="1" ss:StyleID="s32" ><Data ss:Type="Number"></Data></Cell>"); 166 //sw.WriteLine(" </Row>"); 167 sw.WriteLine(" </Table>"); 168 sw.WriteLine(" <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">"); 169 sw.WriteLine(" <Print>"); 170 sw.WriteLine(" <ValidPrinterInfo/>"); 171 sw.WriteLine(" <PaperSizeIndex>9</PaperSizeIndex>"); 172 sw.WriteLine(" <HorizontalResolution>600</HorizontalResolution>"); 173 sw.WriteLine(" <VerticalResolution>600</VerticalResolution>"); 174 sw.WriteLine(" </Print>"); 175 sw.WriteLine(" <Selected/>"); 176 sw.WriteLine(" <Panes>"); 177 sw.WriteLine(" <Pane>"); 178 sw.WriteLine(" <Number>3</Number>"); 179 sw.WriteLine(" <ActiveRow>8</ActiveRow>"); 180 sw.WriteLine(" <ActiveCol>12</ActiveCol>"); 181 sw.WriteLine(" </Pane>"); 182 sw.WriteLine(" </Panes>"); 183 sw.WriteLine(" <ProtectObjects>False</ProtectObjects>"); 184 sw.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); 185 sw.WriteLine(" </WorksheetOptions>"); 186 sw.WriteLine(" </Worksheet>"); 187 sw.WriteLine(" <Worksheet ss:Name="Sheet2">"); 188 sw.WriteLine(" <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1""); 189 sw.WriteLine(" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>"); 190 sw.WriteLine(" <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">"); 191 sw.WriteLine(" <ProtectObjects>False</ProtectObjects>"); 192 sw.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); 193 sw.WriteLine(" </WorksheetOptions>"); 194 sw.WriteLine(" </Worksheet>"); 195 sw.WriteLine(" <Worksheet ss:Name="Sheet3">"); 196 sw.WriteLine(" <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1""); 197 sw.WriteLine(" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>"); 198 sw.WriteLine(" <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">"); 199 sw.WriteLine(" <ProtectObjects>False</ProtectObjects>"); 200 sw.WriteLine(" <ProtectScenarios>False</ProtectScenarios>"); 201 sw.WriteLine(" </WorksheetOptions>"); 202 sw.WriteLine(" </Worksheet>"); 203 sw.WriteLine("</Workbook>"); 204 205 Response.Write(sw); 206 Response.End(); 207 208 }