ASP.NET導(dǎo)出Excel(利用NPOI和EPPlus庫秃励,無需安裝Office)

文章摘自:http://blog.csdn.net/accountwcx/article/details/8144970

網(wǎng)上提供了很多Asp.net中操作Excel的方法谚殊,其中大部分是調(diào)用微軟的Office組件料按,下面提供三個無須安裝Office即可從Asp.net輸出Excel的方法银萍。

1 簡單方法

//下面代碼輸出的Excel有三列(姓名拔疚、年齡肥隆、性別)
//列之間用\t隔開
StringWriter sw = new StringWriter();
sw.WriteLine("姓名\t年齡\t性別");      //Excel表格的列標題  
sw.WriteLine("張三\t29\t男");          //行數(shù)據(jù)
sw.WriteLine("李四\t35\t男");
sw.WriteLine("王五\t20\t女");

/*如果從數(shù)據(jù)庫返回的數(shù)據(jù)
DataTable dt; //假設(shè)dt已經(jīng)有數(shù)據(jù),數(shù)據(jù)格式name稚失、age栋艳、sex
foreach(DataRow row in dt.Rows)
{
    sw.WriteLine(string.Format("{0}\t{1}\t{2}", row["name"], row["age"], row["sex"]));
}
*/

//asp.net輸出的Excel文件名
//如果文件名是中文的話,需要進行編碼轉(zhuǎn)換句各,否則瀏覽器看到的下載文件是亂碼吸占。
string fileName = HttpUtility.UrlEncode("Excel.xls");;

Response.Buffer = true;
Response.Clear();

//asp.net返回的數(shù)據(jù)類型,這里設(shè)置download凿宾。
//瀏覽器會把返回的數(shù)據(jù)當(dāng)成文件下載來處理矾屯。
Response.ContentType = "application/download";

//設(shè)置返回數(shù)據(jù)的編碼,如果不設(shè)置該項初厚,Excel的中文是亂碼件蚕。
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ";");

Response.Write(sw); //把數(shù)據(jù)寫入輸出流。
Response.Flush();
Response.Close();

2 NPOI導(dǎo)出Excel 2003

NPOI是一個開源庫产禾,支持各種Excel操作排作,不過只能操作97~2003版的Excel,不兼容Excel 2007亚情。

NPOI的下載地址是http://npoi.codeplex.com/妄痪,目前最新版本是1.2.5。

//引入NPOI庫
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.SS.UserModel;

//////////////////////////////////////////////////////////////////////////////////////
HSSFWorkbook hssfworkbook = new HSSFWorkbook();

//Excel文件的摘要信息
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "blog.csdn.net";
hssfworkbook.DocumentSummaryInformation = dsi;

SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "Export Excel";
hssfworkbook.SummaryInformation = si;

//下面代碼輸出的Excel有三列(姓名楞件、年齡衫生、性別)
ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");

IRow row0 = sheet1.CreateRow(0);
row0.CreateCell(0).SetCellValue("姓名");
row0.CreateCell(1).SetCellValue("年齡");
row0.CreateCell(2).SetCellValue("性別");

IRow row1 = sheet1.CreateRow(1);
row1.CreateCell(0).SetCellValue("張三");
row1.CreateCell(1).SetCellValue(29);
row1.CreateCell(2).SetCellValue("男");

IRow row2 = sheet1.CreateRow(2);
row2.CreateCell(0).SetCellValue("李四");
row2.CreateCell(1).SetCellValue(35);
row2.CreateCell(2).SetCellValue("男");

IRow row3 = sheet1.CreateRow(3);
row3.CreateCell(0).SetCellValue("王五");
row3.CreateCell(1).SetCellValue(20);
row3.CreateCell(2).SetCellValue("女");

/*如果從數(shù)據(jù)庫獲取的數(shù)據(jù)
DataTable dt = null; //假設(shè)dt已經(jīng)有數(shù)據(jù)裳瘪,數(shù)據(jù)格式name、age罪针、sex

for (int i = 0; i < dt.Rows.Count; i++)
{
    //DataTable中的行和Excel中的行對應(yīng)    
    DataRow row = dt.Rows[i];
    IRow excelRow = sheet1.CreateRow(i);
    excelRow.CreateCell(0).SetCellValue(row["name"].ToString());
    excelRow.CreateCell(1).SetCellValue(row["age"].ToString());
    excelRow.CreateCell(2).SetCellValue(row["sex"].ToString());

    //DataTable中的Column和Excel中的Cell對應(yīng)
    //也可以對DataTable中的列進行循環(huán)獲取字段值
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        string value = dt.Rows[i][j].ToString();
        excelRow.CreateCell(j).SetCellValue(value);
    }
}
*/

MemoryStream ms = new MemoryStream();
hssfworkbook.Write(ms);

//asp.net輸出的Excel文件名
//如果文件名是中文的話彭羹,需要進行編碼轉(zhuǎn)換,否則瀏覽器看到的下載文件是亂碼站故。
string fileName = HttpUtility.UrlEncode("Excel.xls");

Response.ContentType = "application/vnd.ms-excel";
//Response.ContentType = "application/download"; //也可以設(shè)置成download
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));            

Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(ms.GetBuffer());
Response.End();

3 EPPlus庫生成Excel 2007

EPPlus支持Excel 2007皆怕,下載地址http://epplus.codeplex.com/

//引入EPPlus的命名空間
//using OfficeOpenXml;

ExcelPackage excel = new ExcelPackage();
ExcelWorksheet sheet = excel.Workbook.Worksheets.Add("sheet1");
sheet.Cells["A1"].Value = "姓名";
sheet.Cells["B1"].Value = "年齡";
sheet.Cells["C1"].Value = "性別";

sheet.Cells["A2"].Value = "張三";
sheet.Cells["B2"].Value = 29;
sheet.Cells["C2"].Value = "男";

sheet.Cells["A3"].Value = "李四";
sheet.Cells["B3"].Value = 35;
sheet.Cells["C3"].Value = "男";

sheet.Cells["A4"].Value = "王五";
sheet.Cells["B4"].Value = 20;
sheet.Cells["C4"].Value = "女";

/*
//也可以用2維數(shù)組
//數(shù)組的索引從1開始
sheet.Cells[1, 1].Value = "姓名";
sheet.Cells[1, 2].Value = "年齡";
sheet.Cells[1, 3].Value = "性別";

sheet.Cells[2, 1].Value = "張三";
sheet.Cells[2, 2].Value = 29;
sheet.Cells[2, 3].Value = "男";

sheet.Cells[3, 1].Value = "李四";
sheet.Cells[3, 2].Value = 35;
sheet.Cells[3, 3].Value = "男";

sheet.Cells[4, 1].Value = "王五";
sheet.Cells[4, 2].Value = 20;
sheet.Cells[4, 3].Value = "女";
*/

MemoryStream ms = new MemoryStream();
excel.SaveAs(ms);

//asp.net輸出的Excel文件名  
//如果文件名是中文的話西篓,需要進行編碼轉(zhuǎn)換愈腾,否則瀏覽器看到的下載文件是亂碼。  
string fileName = HttpUtility.UrlEncode("Excel.xlsx");

Response.ContentType = "application/vnd.ms-excel";
//Response.ContentType = "application/download"; //也可以設(shè)置成download  
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));

Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(ms.GetBuffer());
Response.End();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岂津,一起剝皮案震驚了整個濱河市虱黄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吮成,老刑警劉巖橱乱,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粱甫,居然都是意外死亡泳叠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門茶宵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來危纫,“玉大人,你說我怎么就攤上這事乌庶≈值” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵瞒大,是天一觀的道長螃征。 經(jīng)常有香客問我,道長透敌,這世上最難降的妖魔是什么盯滚? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮酗电,結(jié)果婚禮上淌山,老公的妹妹穿的比我還像新娘。我一直安慰自己顾瞻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布德绿。 她就那樣靜靜地躺著荷荤,像睡著了一般退渗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕴纳,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天会油,我揣著相機與錄音,去河邊找鬼古毛。 笑死翻翩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稻薇。 我是一名探鬼主播嫂冻,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塞椎!你這毒婦竟也來了桨仿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤案狠,失蹤者是張志新(化名)和其女友劉穎服傍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骂铁,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡吹零,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拉庵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灿椅。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖名段,靈堂內(nèi)的尸體忽然破棺而出阱扬,到底是詐尸還是另有隱情,我是刑警寧澤伸辟,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布麻惶,位于F島的核電站,受9級特大地震影響信夫,放射性物質(zhì)發(fā)生泄漏窃蹋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一静稻、第九天 我趴在偏房一處隱蔽的房頂上張望警没。 院中可真熱鬧,春花似錦振湾、人聲如沸杀迹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽树酪。三九已至浅碾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間续语,已是汗流浹背垂谢。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疮茄,地道東北人滥朱。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像力试,于是被迫代替她去往敵國和親徙邻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Json.NET http://json.codeplex.com/ Json.Net 是一個讀寫Json效率比較...
    月芽兒爸爸閱讀 2,034評論 0 32
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,989評論 1 3
  • 在Asp.Net程序開發(fā)中懂版,經(jīng)常會遇到大批量數(shù)據(jù)導(dǎo)出到Excel報表的情況鹃栽,特別是對于業(yè)務(wù)型的平臺,導(dǎo)出的數(shù)據(jù)少則...
    斯鈺軒緣閱讀 4,311評論 0 2
  • 最近天氣一直陰晴不定躯畴,驟冷驟熱民鼓。有時候人的心情真的會跟天氣神般的同步!讓人摸不著邊際蓬抄,甚至?xí)X得莫名其妙卻還理所當(dāng)...
    陳陳陳先生閱讀 2,244評論 0 1
  • 人生最珍貴的除了健康和家人丰嘉,還有一直流失的青春。社會不斷的對我們施加壓力嚷缭,強迫我們放氣寶貴的理想和想象力饮亏,來達到別...
    陳二爺閱讀 102評論 0 1