亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#使用NOPI庫實現導入Excel文檔

2019-10-29 21:11:06
字體:
來源:轉載
供稿:網友

使用NOPI導入Excel文檔

NOPI版本:2.3.0,依賴于NPOI的SharpZipLib版本:0.86,經測試適用于.net4.0+

記錄遇到的幾個問題

1.NOPI中的IWorkbook接口:xls使用HSSFWorkbook類實現,xlsx使用XSSFWorkbook類實現

2.日期轉換,判斷row.GetCell(j).CellType == NPOI.SS.UserModel.CellType.Numeric && HSSFDateUtil.IsCellDateFormatted(row.GetCell(j)

不能直接使用row.GetCell(j).DateCellValue,這玩意會直接拋出異常來~

1. 將文件流轉換為DataTable

  /// <summary>  /// 根據Excel格式讀取Excel  /// </summary>  /// <param name="stream">文件流</param>  /// <param name="type">Excel格式枚舉類型,xls/xlsx</param>  /// <param name="sheetName">表名,默認取第一張</param>  /// <returns>DataTable</returns>  private static DataTable ImportExcel(Stream stream, ExcelExtType type, string sheetName)  {    DataTable dt = new DataTable();    IWorkbook workbook;    try    {      //xls使用HSSFWorkbook類實現,xlsx使用XSSFWorkbook類實現      switch (type)      {        case ExcelExtType.xlsx:          workbook = new XSSFWorkbook(stream);          break;        default:          workbook = new HSSFWorkbook(stream);          break;      }      ISheet sheet = null;      //獲取工作表 默認取第一張      if (string.IsNullOrWhiteSpace(sheetName))        sheet = workbook.GetSheetAt(0);      else        sheet = workbook.GetSheet(sheetName);      if (sheet == null)        return null;      IEnumerator rows = sheet.GetRowEnumerator();      #region 獲取表頭      IRow headerRow = sheet.GetRow(0);      int cellCount = headerRow.LastCellNum;      for (int j = 0; j < cellCount; j++)      {        ICell cell = headerRow.GetCell(j);        if (cell != null)        {          dt.Columns.Add(cell.ToString());        }        else        {          dt.Columns.Add("");        }      }      #endregion      #region 獲取內容      for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)      {        IRow row = sheet.GetRow(i);        DataRow dataRow = dt.NewRow();        for (int j = row.FirstCellNum; j < cellCount; j++)        {          if (row.GetCell(j) != null)          {            //判斷單元格是否為日期格式            if (row.GetCell(j).CellType == NPOI.SS.UserModel.CellType.Numeric && HSSFDateUtil.IsCellDateFormatted(row.GetCell(j)))            {              if (row.GetCell(j).DateCellValue.Year >=1970)              {                dataRow[j] = row.GetCell(j).DateCellValue.ToString();              }              else              {                dataRow[j] = row.GetCell(j).ToString();              }            }            else            {              dataRow[j] = row.GetCell(j).ToString();            }          }        }        dt.Rows.Add(dataRow);      }      #endregion    }    catch (Exception ex)    {      dt=null;    }    finally    {      //if (stream != null)      //{      //  stream.Close();      //  stream.Dispose();      //}    }    return dt;  }

2. 文件上載導入

  /// <summary>  /// 上傳Excel導入  /// </summary>  /// <param name="file">上載文件對象</param>  /// <param name="errorMsg">錯誤信息</param>  /// <param name="sheetName">表名,默認取第一張</param>  /// <returns></returns>  public static DataTable Import(System.Web.HttpPostedFileBase file, ref string errorMsg, string sheetName = "")  {    if (file == null || file.InputStream == null || file.InputStream.Length == 0)    {      errorMsg = "請選擇要導入的Excel文件";      return null;    }    var excelType = GetExcelFileType(file.FileName);    if (excelType == null)    {      errorMsg = "請選擇正確的Excel文件";      return null;    }    using (var stream = new MemoryStream())    {      file.InputStream.Position = 0;      file.InputStream.CopyTo(stream);      var dt = ImportExcel(stream, excelType.Value, sheetName);      if (dt == null)        errorMsg = "導入失敗,請選擇正確的Excel文件";      return dt;    }  }

3. 本地路徑讀取導入
 

  /// <summary>  /// 根據文件路徑導入Excel  /// </summary>  /// <param name="filePath"></param>  /// <param name="errorMsg">錯誤信息</param>  /// <param name="sheetName">表名,默認取第一張</param>  /// <returns>可能為null的DataTable</returns>  public static DataTable Import(string filePath, ref string errorMsg, string sheetName = "")  {    var excelType = GetExcelFileType(filePath);    if (GetExcelFileType(filePath) == null)    {      errorMsg = "請選擇正確的Excel文件";      return null;    }    if (!File.Exists(filePath))    {      errorMsg = "沒有找到要導入的Excel文件";      return null;    }    DataTable dt;    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))    {      dt = ImportExcel(stream, excelType.Value, sheetName);    }    if (dt == null)      errorMsg = "導入失敗,請選擇正確的Excel文件";    return dt;  }

4.完整demo

附贈一個winform導入Excel的Demo。

https://github.com/yimogit/NopiExcelDemo


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久亚洲精品国产| 91在线观看免费高清完整版在线观看| 欧美在线xxx| 亚洲黄一区二区| 亚洲成人a级网| 欧美日本啪啪无遮挡网站| 韩国国内大量揄拍精品视频| 国产精品久久一区| 欧美激情一级精品国产| 日韩在线视频免费观看| 2019中文字幕全在线观看| 成年无码av片在线| 国产精品久久久久久久久久ktv| 国产欧美一区二区三区视频| 久久亚洲一区二区三区四区五区高| 91最新国产视频| 国产精品一区二区性色av| 久久精品免费播放| 国产一区二区三区欧美| 亚洲一区二区日本| 亚洲欧美成人精品| 国产91精品最新在线播放| 91久久国产综合久久91精品网站| 一区二区三区国产在线观看| 国产欧美在线看| 中文字幕v亚洲ⅴv天堂| 国产精品黄色av| 色悠悠久久88| 成人情趣片在线观看免费| 精品欧美激情精品一区| 久久夜色精品国产| 福利视频一区二区| 高清欧美一区二区三区| 91精品久久久久久久久久久| 91精品久久久久久久久久久久久| 亚洲男人7777| 不卡毛片在线看| 欧美日在线观看| 成人国产精品免费视频| 高清一区二区三区日本久| 日韩理论片久久| 在线中文字幕日韩| 91精品国产色综合久久不卡98| 亚洲欧洲激情在线| 国产成人一区二区在线| 亚洲va欧美va在线观看| 久久综合久久美利坚合众国| 久久人体大胆视频| 一本大道香蕉久在线播放29| 国产精品久久久久秋霞鲁丝| 亚洲女人天堂视频| 日韩在线观看网址| 欧美性猛交xxxx乱大交3| 欧美性一区二区三区| 久久这里只有精品视频首页| 国产精品黄色影片导航在线观看| 日韩美女视频免费在线观看| 在线观看日韩专区| 欧美激情在线有限公司| 九色91av视频| 亚洲综合色激情五月| 久久精品精品电影网| 国内精品久久久久久中文字幕| 国产精品香蕉国产| 麻豆乱码国产一区二区三区| 欧美精品一二区| 国产美女精品视频| 97在线视频观看| 欧美色视频日本高清在线观看| 亚洲一区二区福利| 日韩av成人在线观看| 久久伊人精品视频| 欧美老女人在线视频| 91在线观看免费观看| 成人a视频在线观看| 国产精品第1页| 91中文在线视频| 日韩在线视频播放| 91国内揄拍国内精品对白| 大胆人体色综合| 日韩av一区在线| 国产日产亚洲精品| 国产精品无av码在线观看| 久久久久久久久久久av| 亚洲美女精品成人在线视频| 国产精品99一区| 成人免费视频在线观看超级碰| 亚洲女人天堂成人av在线| 亚洲国产精品推荐| 国内精久久久久久久久久人| 欧美国产精品va在线观看| 懂色aⅴ精品一区二区三区蜜月| 亚洲有声小说3d| 精品视频久久久久久| 欧美日韩国产在线播放| 色久欧美在线视频观看| 成人精品一区二区三区电影黑人| 国产精品老女人视频| 精品动漫一区二区| 91精品国产色综合久久不卡98| 最新亚洲国产精品| 欧美另类69精品久久久久9999| 欧美激情精品久久久久久| 国产精品免费看久久久香蕉| 91免费看视频.| 国产精品免费电影| 久久久99免费视频| 亚洲国产第一页| 久久亚洲成人精品| 不卡av电影在线观看| 久久久久这里只有精品| 美女av一区二区| 亚洲色图第三页| 伊人伊成久久人综合网小说| 亚洲黄页视频免费观看| 亚洲一区二区三区视频播放| 福利精品视频在线| 欧美精品videosex牲欧美| 国产成人一区二区三区电影| 久久成人精品一区二区三区| 亚洲xxxx视频| 精品女厕一区二区三区| 国产亚洲视频中文字幕视频| 九九热这里只有精品免费看| 亚洲色图第三页| 久久久精品在线| 欧美中文在线视频| 这里只有精品丝袜| 97国产精品人人爽人人做| 91视频8mav| 成人激情视频在线| 91美女片黄在线观看游戏| 2019中文字幕在线免费观看| 亚洲福利视频久久| 欧美精品久久久久久久| 欧美专区中文字幕| 国产999精品久久久影片官网| 欲色天天网综合久久| 日本不卡高字幕在线2019| 在线观看国产精品淫| 色综合天天狠天天透天天伊人| 最近2019好看的中文字幕免费| 国产亚洲精品va在线观看| 国产精品三级久久久久久电影| 日韩av电影免费观看高清| 久久久久久久色| 亚洲天堂网站在线观看视频| 91欧美精品成人综合在线观看| 日韩中文av在线| 久久99国产精品自在自在app| 欧美成人精品在线观看| 97精品视频在线观看| 精品在线小视频| 亲子乱一区二区三区电影| 国产精品96久久久久久又黄又硬| 欧美日韩激情小视频| 91精品免费视频| 久久久久国产精品www| 奇门遁甲1982国语版免费观看高清| 高清亚洲成在人网站天堂| 国产在线拍揄自揄视频不卡99| 国产成人精品在线观看| 日韩精品福利网站| 伊人久久男人天堂|