C#中写入Excel
生活随笔
收集整理的這篇文章主要介紹了
C#中写入Excel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Web;
using?System.Data;
namespace?Common.BaseClass
{
public?class?FileExport
{
#region?導出文件為?Excel文件?文本格式
///?<summary>
///?導出文件為?Excel文件
///?</summary>
///?<param?name="dt">數據集</param>
///?<param?name="FileName">導出文件名稱</param>
///?<param?name="headers">列名</param>
///?<param?name="remark">備注</param>
public?void?CreateExcel(DataTable?dt,?string?FileName,?string[]?headers,?string[]?remark)
{
HttpResponse?resp;
resp?=?HttpContext.Current.Response;
resp.ContentEncoding?=?System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition",?"attachment;filename="?+?FileName);
//標題?內容
string?colHeaders?=?"",?ls_item?=?"";
int?i?=?0;
DataRow[]?myRow?=?dt.Select("");
for?(i?=?0;?i?<?remark.Length;?i++)
{
colHeaders?+=?remark[i]?+?"\n";
}
//取得數據表各列標題,各標題之間以\t分割,最后一個列標題后加回車符
for?(i?=?0;?i?<?headers.Length;?i++)
{
colHeaders?+=?headers[i]?+?"\t";
}
colHeaders?+=?"\n";
//向HTTP輸出流中寫入取得的數據信息
resp.Write(colHeaders);
//逐行處理數據
foreach?(DataRow?row?in?myRow)
{
//在當前行中,逐列獲得數據,數據之間以\t分割,結束時加回車符\n
for?(i?=?0;?i?<?dt.Columns.Count;?i++)
{
ls_item?+=?row[i].ToString()?+?"\t";
//當前行數據寫入HTTP輸出流,并且置空ls_item以便下行數據
}
ls_item?+=?"\n";
resp.Write(ls_item);
ls_item?=?"";
}
//寫緩沖區中的數據到HTTP頭文件中
resp.End();
}
#endregion
///?<summary>
///?將Dataset中的表導出到Excel中
///?</summary>
///?<param?name="source">源數據集</param>
///?<param?name="fileName">保存的文件名</param>
///?<param?name="title">標題</param>
///?<param?name="headers">列名</param>
///?<param?name="explain">文件生成說明</param>
///?<param?name="ps">注釋</param>
public?static?void?ExportToExcel(DataTable?source,?string?fileName,?string[]?headers,?string?title,?string?explain,string?[]ps)
{
HttpResponse?resp;
resp?=?HttpContext.Current.Response;
resp.ContentEncoding?=?System.Text.Encoding.GetEncoding("utf-8");
resp.AppendHeader("Content-Disposition",?"attachment;filename="?+?fileName);
string?startExcelXML?=?@"<?xml?version=""1.0""?encoding=""utf-8""?>
<Workbook?xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-?microsoft-com:office:excel""
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">
<Styles>
<Style?ss:ID=""Default""?ss:Name=""Normal"">
<Alignment?ss:Horizontal=""Center""?ss:Vertical=""Center""/>
<Font/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style?ss:ID=""BoldColumn"">
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Left""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Right""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?ss:Bold=""1""?x:CharSet=""134""?ss:Size=""12""?/>
<Interior?ss:Color=""#D2EAF6""?ss:Pattern=""Solid""/>
</Style>
<Style?ss:ID=""StringLiteral"">
<NumberFormat?ss:Format=""@""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Left""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Right""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""12""?/>
</Style>
<Style?ss:ID=""Decimal"">
<NumberFormat?ss:Format=""0.00""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Left""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Right""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""12""?/>
</Style>
<Style?ss:ID=""Integer"">
<NumberFormat?ss:Format=""0""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Left""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Right""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""12""?/>
</Style>
<Style?ss:ID=""DateLiteral"">
<NumberFormat?ss:Format=""yyyy-MM-dd?HH:mm;@""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Left""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Right""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""12""?/>
</Style>
<Style?ss:ID=""ps""><!--注釋-->
<Alignment?ss:Horizontal=""Left""?ss:Vertical=""Center""/>
<Font?ss:FontName=""宋體""?x:CharSet=""134""/>
<Interior?ss:Color=""#FFFFCC""?ss:Pattern=""Solid""/>
</Style>
<Style?ss:ID=""explain""><!--說明:數據跟據什么而來-->
<Alignment?ss:Horizontal=""Left""?ss:Vertical=""Center""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
<Border?ss:Position=""Top""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""12""/>
</Style>
<Style?ss:ID=""Title""><!--大標題-->
<Alignment?ss:Horizontal=""Center""?ss:Vertical=""Center""/>
<Borders>
<Border?ss:Position=""Bottom""?ss:LineStyle=""Continuous""?ss:Weight=""1""/>
</Borders>
<Font?ss:FontName=""宋體""?x:CharSet=""134""?ss:Size=""16""?ss:Bold=""1""/>
</Style>
</Styles>";
string?endExcelXML?=?"\r\n</Workbook>";
int?rowCount?=?0;
int?sheetCount?=?0;
resp.Write(startExcelXML);
sheetCount++;
resp.Write("\r\n<Worksheet?ss:Name=\""?+?title?+?"\">");
resp.Write("\r\n<Table>");
//寫標題
resp.Write("\r\n<Row>\r\n<Cell?ss:MergeAcross=\""?+?(source.Columns.Count?-?1)?+?"\"?ss:StyleID=\"Title\"><Data?ss:Type=\"String\">"?+?title?+?"</Data></Cell>\t\t\t\r\n</Row>");
//寫數據來源
resp.Write("\r\n<Row>\r\n<Cell?ss:MergeAcross=\""?+?(source.Columns.Count?-?1)?+?"\"?ss:StyleID=\"explain\"><Data?ss:Type=\"String\">"?+?explain?+?"</Data></Cell>\r\n</Row>");
resp.Write("\r\n<Row>");
//得到數據集有多少列
//for?(int?x?=?0;?x?<?source.Columns.Count;?x++)
//{
//?resp.Write("<Cell?ss:StyleID=\"BoldColumn\"><Data?ss:Type=\"String\">");
//?resp.Write(source.Columns[x].ColumnName);
//?resp.Write("</Data></Cell>");
//}//New?自己定義列名
for?(int?x?=?0;?x?<?headers.Length;?x++)
{
resp.Write("\r\n<Cell?ss:StyleID=\"BoldColumn\"><Data?ss:Type=\"String\">");
resp.Write(headers[x]);
resp.Write("</Data></Cell>");
}
resp.Write("</Row>");
//便歷出數據集中的每一行數據
foreach?(DataRow?x?in?source.Rows)
{
rowCount++;
//如果行數超過 陸萬肆仟行,則新起一頁
if?(rowCount?==?64000)
{
rowCount?=?0;
sheetCount++;
resp.Write("\r\n</Table>");
resp.Write("?\r\n</Worksheet>");
resp.Write("\r\n<Worksheet?ss:Name=\""?+?source.TableName?+?sheetCount?+?"\">");
resp.Write("\r\n<Table>");
}
resp.Write("\r\n<Row>");?//ID="?+?rowCount?+?"
for?(int?y?=?0;?y?<?source.Columns.Count;?y++)
{
System.Type?rowType;
//獲得將要寫入數據的數據類型
rowType?=?x[y].GetType();
switch?(rowType.ToString())
{
case?"System.String":
string?XMLstring?=?x[y].ToString();
XMLstring?=?XMLstring.Trim();
XMLstring?=?XMLstring.Replace("&",?"&");
XMLstring?=?XMLstring.Replace(">",?">");
XMLstring?=?XMLstring.Replace("<",?"<");
resp.Write("\r\n<Cell?ss:StyleID=\"StringLiteral\">"?+
"<Data?ss:Type=\"String\">");
resp.Write(XMLstring);
resp.Write("</Data></Cell>");
break;
case?"System.DateTime":
//Excel?has?a?specific?Date?Format?of?YYYY-MM-DD?followed?by
//the?letter?'T'?then?hh:mm:sss.lll?Example?2005-01-31T24:01:21.000
//The?Following?Code?puts?the?date?stored?in?XMLDate
//to?the?format?above
DateTime?XMLDate?=?(DateTime)x[y];
string?XMLDatetoString?=?"";?//Excel?Converted?Date
XMLDatetoString?=?XMLDate.Year.ToString()?+
"-"?+
(XMLDate.Month?<?10???"0"?+
XMLDate.Month.ToString()?:?XMLDate.Month.ToString())?+
"-"?+
(XMLDate.Day?<?10???"0"?+
XMLDate.Day.ToString()?:?XMLDate.Day.ToString())?+
"T"?+
(XMLDate.Hour?<?10???"0"?+
XMLDate.Hour.ToString()?:?XMLDate.Hour.ToString())?+
":"?+
(XMLDate.Minute?<?10???"0"?+
XMLDate.Minute.ToString()?:?XMLDate.Minute.ToString())?+
":"?+
(XMLDate.Second?<?10???"0"?+
XMLDate.Second.ToString()?:?XMLDate.Second.ToString())?+
".000";
resp.Write("\r\n<Cell?ss:StyleID=\"DateLiteral\">"?+
"<Data?ss:Type=\"DateTime\">");
resp.Write(XMLDatetoString);
resp.Write("</Data></Cell>");
break;
case?"System.Boolean":
resp.Write("\r\n<Cell?ss:StyleID=\"StringLiteral\">"?+
"<Data?ss:Type=\"String\">");
resp.Write(x[y].ToString());
resp.Write("</Data></Cell>");
break;
case?"System.Int16":
case?"System.Int32":
case?"System.Int64":
case?"System.Byte":
resp.Write("\r\n<Cell?ss:StyleID=\"Integer\">"?+
"<Data?ss:Type=\"Number\">");
resp.Write(x[y].ToString());
resp.Write("</Data></Cell>");
break;
case?"System.Decimal":
case?"System.Double":
resp.Write("\r\n<Cell?ss:StyleID=\"Decimal\">"?+
"<Data?ss:Type=\"Number\">");
resp.Write(x[y].ToString());
resp.Write("</Data></Cell>");
break;
case?"System.DBNull":
resp.Write("\r\n<Cell?ss:StyleID=\"StringLiteral\">"?+
"<Data?ss:Type=\"String\">");
resp.Write("");
resp.Write("</Data></Cell>");
break;
default:
throw?(new?Exception(rowType.ToString()?+?"?not?handled."));
}
}
resp.Write("\r\n</Row>");
}
//注釋
foreach?(string?str?in?ps)
{
resp.Write("\r\n<Row>\r\n<Cell?ss:MergeAcross=\""?+?(source.Columns.Count?-?1)?+?"\"?ss:StyleID=\"ps\"><Data?ss:Type=\"String\">"?+?str?+?"</Data></Cell>\r\n</Row>");
}
resp.Write("\r\n</Table>");
resp.Write("\r\n</Worksheet>");
resp.Write(endExcelXML);
resp.End();
}
}
}
轉載于:https://www.cnblogs.com/raindust/archive/2007/08/16/857479.html
總結
以上是生活随笔為你收集整理的C#中写入Excel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为27asph是什么型号_上半年苹果全
- 下一篇: C#创建简单的验证码