asp.net 使用NPOI讀取excel文件

public class ExcelHelper

{

? ? /// <summary>

? ? /// 讀取Excel文件數(shù)據(jù)到DataSet,一個(gè)Sheet對(duì)應(yīng)一個(gè)DataTable

? ? /// </summary>

? ? /// <param name="strExcelFilePath">Excel文件的物理路徑</param>

? ? /// <returns></returns>

? ? public static DataSet GetDataFromExcel(string strExcelPhysicalPath, out string strError)

? ? {

? ? ? ? try

? ? ? ? {

? ? ? ? ? ? DataSet dsResult = new DataSet();

? ? ? ? ? ? strError = "";

? ? ? ? ? ? IWorkbook wbook = null;

? ? ? ? ? ? using (FileStream fs = new FileStream(strExcelPhysicalPath, FileMode.Open, FileAccess.Read))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if (strExcelPhysicalPath.IndexOf(".xlsx") > 0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? wbook = new XSSFWorkbook(fs);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? wbook = new HSSFWorkbook(fs);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? for (int i = 0; i < wbook.NumberOfSheets; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? ISheet wsheet = wbook.GetSheetAt(i);

? ? ? ? ? ? ? ? if (wsheet == null) continue;

? ? ? ? ? ? ? ? DataTable dtSheet = GetDataFromSheet(wsheet, out strError);

? ? ? ? ? ? ? ? if (dtSheet != null)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? dtSheet.TableName = wsheet.SheetName.Trim();

? ? ? ? ? ? ? ? ? ? dsResult.Tables.Add(dtSheet);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? dsResult = null;

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? return dsResult;

? ? ? ? }

? ? ? ? catch (Exception ex)

? ? ? ? {

? ? ? ? ? ? strError = ex.Message.ToString();

? ? ? ? ? ? return null;

? ? ? ? }

? ? }

? ? private static DataTable GetDataFromSheet(ISheet wsheet, out string strError)

? ? {

? ? ? ? try

? ? ? ? {

? ? ? ? ? ? DataTable dtResult = new DataTable();

? ? ? ? ? ? strError = "";

? ? ? ? ? ? //取sheet最大列數(shù)

? ? ? ? ? ? int max_column = 0;

? ? ? ? ? ? for (int i = wsheet.FirstRowNum; i <= wsheet.LastRowNum; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? IRow rsheet = wsheet.GetRow(i);

? ? ? ? ? ? ? ? if (rsheet != null && rsheet.LastCellNum > max_column)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? max_column = rsheet.LastCellNum;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? //給DataTable添加列

? ? ? ? ? ? for (int i = 0; i < max_column; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? dtResult.Columns.Add("A" + i.ToString());

? ? ? ? ? ? }

? ? ? ? ? ? for (int i = wsheet.FirstRowNum; i <= wsheet.LastRowNum; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? DataRow dRow = dtResult.NewRow();

? ? ? ? ? ? ? ? IRow rsheet = wsheet.GetRow(i);

? ? ? ? ? ? ? ? if (rsheet == null) continue;

? ? ? ? ? ? ? ? for (int j = rsheet.FirstCellNum; j < rsheet.LastCellNum; j++)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ICell csheet = rsheet.GetCell(j);

? ? ? ? ? ? ? ? ? ? if (csheet == null) continue;

? ? ? ? ? ? ? ? ? ? switch (csheet.CellType)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? case CellType.Blank:

? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = "";

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case CellType.Boolean:

? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.BooleanCellValue;

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case CellType.Error:

? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.ErrorCellValue;

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case CellType.Formula:

? ? ? ? ? ? ? ? ? ? ? ? ? ? try

? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.NumericCellValue;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? short format1 = csheet.CellStyle.DataFormat;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (format1 == 177 || format1 == 178 || format1 == 188)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.NumericCellValue.ToString("#0.00");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? catch

? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.StringCellValue.Trim();

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case CellType.Numeric:

? ? ? ? ? ? ? ? ? ? ? ? ? ? try

? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? short format2 = csheet.CellStyle.DataFormat;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (format2 == 14 || format2 == 31 || format2 == 57 || format2 == 58)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.DateCellValue;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.NumericCellValue;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (format2 == 177 || format2 == 178 || format2 == 188)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.NumericCellValue.ToString("#0.00");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? catch

? ? ? ? ? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.StringCellValue.Trim();

? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case CellType.String:

? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.StringCellValue.Trim();

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? ? ? ? ? dRow[j] = csheet.StringCellValue.Trim();

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? dtResult.Rows.Add(dRow);

? ? ? ? ? ? }

? ? ? ? ? ? return dtResult;

? ? ? ? }

? ? ? ? catch (Exception ex)

? ? ? ? {

? ? ? ? ? ? strError = ex.Message.ToString();

? ? ? ? ? ? return null;

? ? ? ? }

? ? }

}

亞馬遜測(cè)評(píng)www.yisuping.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捐晶,一起剝皮案震驚了整個(gè)濱河市菲语,隨后出現(xiàn)的幾起案子妄辩,更是在濱河造成了極大的恐慌,老刑警劉巖山上,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眼耀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡佩憾,警方通過(guò)查閱死者的電腦和手機(jī)哮伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妄帘,“玉大人楞黄,你說(shuō)我怎么就攤上這事÷胀眨” “怎么了鬼廓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)致盟。 經(jīng)常有香客問(wèn)我碎税,道長(zhǎng),這世上最難降的妖魔是什么馏锡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任雷蹂,我火速辦了婚禮,結(jié)果婚禮上杯道,老公的妹妹穿的比我還像新娘匪煌。我一直安慰自己,他們只是感情好蕉饼,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布虐杯。 她就那樣靜靜地躺著,像睡著了一般昧港。 火紅的嫁衣襯著肌膚如雪擎椰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天创肥,我揣著相機(jī)與錄音达舒,去河邊找鬼。 笑死叹侄,一個(gè)胖子當(dāng)著我的面吹牛巩搏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播趾代,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼贯底,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撒强?” 一聲冷哼從身側(cè)響起禽捆,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笙什,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胚想,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體琐凭,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年浊服,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统屈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牙躺,死狀恐怖愁憔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情述呐,我是刑警寧澤惩淳,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站乓搬,受9級(jí)特大地震影響思犁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜进肯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一激蹲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧江掩,春花似錦学辱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抬吟,卻和暖如春萨咕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背火本。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工危队, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钙畔。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓茫陆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親擎析。 傳聞我的和親對(duì)象是個(gè)殘疾皇子簿盅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361