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

首頁 > 學院 > 開發設計 > 正文

NPOI 2.0 Excel讀取顯示

2019-11-17 01:25:59
字體:
來源:轉載
供稿:網友

NPOI 2.0 Excel讀取顯示

最近接到需求,需要把excel表格里的數據原樣展示到web頁面,主要是滿足隨意跨行跨列。

之前用過一點NPOI,不過接觸的不太多,趁這次機會再熟悉一下。由于操作的excel都是2007以上的版本,所以選擇了2.0的版本。

這里稍微提一下2.0與1.X的區別:2.0主要針對2007及以上版本,1.X主要針對2003,此外方法也略有不同,但是過渡還是很平緩的,這里不做過多的贅述。

詳情請看官網:點擊此處

假設一下是excel 文件的 Sheet1頁,轉換成web之后仍是同樣效果。

日期買入
買入額(萬元)償還額(萬元)凈買入額(萬元)
2014-1-3067644.7158602.779041.94
2013-12-31520660.88449425.2271235.66
2013-11-29515912.92525626.82-9713.91
2013-10-31758822.25738848.4719973.79

后臺代碼:

    using NPOI;    using NPOI.HSSF.UserModel;   //2003版本    using NPOI.XSSF.UserModel;   //2007版本    using NPOI.SS.UserModel;

         public string ConvertExcelToJsonString()         {             try             {           string excelName = "data.xlsx";                 string sheet = "Sheet3";                 string filePath = HttpContext.Current.Server.MapPath(String.Format("~/App_Data/{0}", excelName));                 //HSSFWorkbook wb = new HSSFWorkbook(new FileStream(filePath, FileMode.Open, Fileaccess.Read));                 //HSSFSheet sht = (HSSFSheet)wb.GetSheet(sheet); 如果是2003 則用HSS開頭的對象。                 FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);                 XSSFWorkbook xworkbook = new XSSFWorkbook(file);                 XSSFSheet xsheet = (XSSFSheet)xworkbook.GetSheet(sheet);                 int rowsCount = xsheet.PhysicalNumberOfRows; //取行Excel的最大行數                 int colsCount = xsheet.GetRow(0).PhysicalNumberOfCells;//取得Excel的列數                 StringBuilder excelJson = new StringBuilder();                 //StringBuilder table = new StringBuilder();                  int colSpan;                 int rowSpan;                 bool isByRowMerged;                  excelJson.Append("[");                 //table.Append("<table border='1px'>");                 for (int rowIndex = 0; rowIndex < rowsCount; rowIndex++)                 {                     if (rowIndex > 0) { excelJson.Append(","); }                     excelJson.Append("[");                     for (int colIndex = 0; colIndex < colsCount; colIndex++)                     {                         //獲取Table某個TD合并的列數和行數等信息。與Excel中對應Cell的合并行數和列數一致。                         GetTdMergedInfo(xsheet, rowIndex, colIndex, out colSpan, out rowSpan, out isByRowMerged);                         //被合并的行或列不輸出的處理方式不一樣                         //如果已經被 行 合并包含進去了就不輸出TD了。                         if (isByRowMerged)                         {                             continue;                         }                         excelJson.Append("{");                         excelJson.Append(string.Format("Text:'{0}'", xsheet.GetRow(rowIndex).GetCell(colIndex)));                         excelJson.Append(string.Format(",ColSpan:'{0}'",colSpan));                         excelJson.Append(string.Format(",RowSpan:'{0}'",rowSpan));                         excelJson.Append(",Width:''");                         excelJson.Append(",Align:'center'");                         excelJson.Append(",Index:''");                         excelJson.Append("},");                         //列被合并之后此行將少輸出colSpan-1個TD。                         if (colSpan > 1)                             colIndex += colSpan - 1;                                              }                     excelJson.Remove(excelJson.Length-1,1);                     excelJson.Append("]");                 }                 excelJson.Append("]");                 return excelJson.toString();             }             catch (Exception ex)             {                 return null;             }         }

         /// <summary>         ///  獲取Table某個TD合并的列數和行數等信息。與Excel中對應Cell的合并行數和列數一致。         /// </summary>         /// <param name="rowIndex">行號</param>         /// <param name="colIndex">列號</param>         /// <param name="colspan">TD中需要合并的行數</param>         /// <param name="rowspan">TD中需要合并的列數</param>         /// <param name="isByRowMerged">此單元格是否被某個行合并包含在內。如果被包含在內,將不輸出TD。</param>         /// <returns></returns>         PRivate void GetTdMergedInfo(XSSFSheet xsheet, int rowIndex, int colIndex, out int colspan, out int rowspan, out bool isByRowMerged)         {             colspan = 1;             rowspan = 1;             isByRowMerged = false;             int regionsCuont = xsheet.NumMergedRegions;//取得合并單元格的個數             //Region region;             for (int i = 0; i < regionsCuont; i++)             {                 //region = xsheet.GetMergedRegionAt(i); 此方法為1.2版本,高版本已去掉                 CellRangeAddress range = xsheet.GetMergedRegion(i);//取得第i個合并單元格的跨越范圍                 xsheet.IsMergedRegion(range);                 //region = xsheet.GetMergedRegion(i);                 if (range.FirstRow == rowIndex && range.FirstColumn == colIndex)                  {                     colspan = range.LastColumn - range.FirstColumn + 1;                     rowspan = range.LastRow - range.FirstRow + 1;                     return;                 }                 else if (rowIndex > range.FirstRow && rowIndex <= range.LastRow && colIndex >= range.FirstColumn && colIndex <= range.LastColumn)                 {                     isByRowMerged = true;                 }             }         }

前臺代碼:

function ExcelDataBind(data) {    var data = result.Data.toJSON() //此處拿到后臺Json字符串    var tableObj= $('<table border="1"  width="100%"></table>');    var theadObj = $("<thead></thead>");    var tbodyobj = $("<tbody></tbody>");    for (var i = 0; i < data.length; i++) {        var trHtml = '<tr>';       //以下特殊業務需要,請參考自己邏輯修改        for (var j = 0; j < data[i].length; j++) {            var tdType = data[i][j].Index == 1 ? "th" : "td";            var colspan = data[i][j].ColSpan == 1 ? "" : " colspan=" + data[i][j].ColSpan;            var rowspan = data[i][j].RowSpan == 1 ? "" : " rowspan=" + data[i][j].RowSpan;            trHtml += '<' + tdType + colspan + rowspan + ' width=' + data[i][j].Width + ' align="' + data[i][j].Align + '">' + data[i][j].Text + '</' + tdType + '>';        }        trHtml += '</tr>';                if (data[i][0].Index == 1) {            theadObj.append(trHtml);        }else {            tbodyobj.append(trHtml);        }    }    tableObj.append(theadObj).append(tbodyobj);    }

以上功能是將 excel 里的數據轉化成json格式(如下),因為還有別的用處,所以就沒直接轉換成Html的table。如果想直接轉換成Table,請參考官網例子

[[{Text:'日期',ColSpan:'1',RowSpan:'2',Width:'',Align:'center',Index:''},{Text:'買入',ColSpan:'3',RowSpan:'1',Width:'',Align:'center',Index:''}],[{Text:'買入額(萬元)',ColSpan:'1',RowSpan:'1',Width:'',Align:'center',Index:''},{Text:'償還額(萬元)',ColSpan:'1',RowSpan:'1',Width:'',Align:'center',Index:''},{Text:'凈買入額(萬元)',ColSpan:'1',RowSpan:'1',Width:'',Align:'center',Index:''}],[{Text:'30-一月-2014',ColSpan:'1',RowSpan:'1',Width
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品国产三级国产aⅴ浪潮| 色综合伊人色综合网| 日韩国产高清污视频在线观看| 欧美丰满老妇厨房牲生活| 亚洲欧洲一区二区三区在线观看| 91亚洲国产精品| 永久免费看mv网站入口亚洲| 欧洲日本亚洲国产区| 国产精品久久久久久av福利软件| 亚洲福利视频网| 欧美野外wwwxxx| 91精品国产成人www| 亚洲第一av在线| 青草青草久热精品视频在线观看| **欧美日韩vr在线| 成人有码在线播放| 成人激情黄色网| 成人网在线观看| 91丝袜美腿美女视频网站| 中日韩美女免费视频网站在线观看| 色悠久久久久综合先锋影音下载| 欧美成人精品一区二区三区| 亚洲第五色综合网| 日韩激情视频在线| 欧美国产在线电影| 亚洲激情视频网站| 亚洲色图欧美制服丝袜另类第一页| 日韩欧美精品中文字幕| 欧美激情精品久久久久久| 亚洲在线视频观看| 中文字幕日韩在线观看| 日韩国产在线播放| 亚洲精品久久久久久久久久久| 久久精品福利视频| 久久天堂电影网| 91免费的视频在线播放| 国产精品日韩欧美大师| 成人国产精品免费视频| 亚洲毛片一区二区| 亚洲欧美日韩天堂一区二区| 亚洲人成电影在线| 91美女高潮出水| 国产中文字幕91| 久久99精品久久久久久琪琪| 欧美裸体xxxx极品少妇| 欧美第一黄网免费网站| 亚洲女同性videos| 国产精品久久久久9999| 岛国av一区二区| 欧美男插女视频| xxx成人少妇69| 成人亲热视频网站| 欧美日韩国产中文精品字幕自在自线| 日韩理论片久久| 国产成人黄色av| 91网站免费看| 国产成人高清激情视频在线观看| 亚洲精品av在线| 久久久久久九九九| 成人免费视频在线观看超级碰| 亚洲一区亚洲二区亚洲三区| 久久av红桃一区二区小说| 麻豆国产va免费精品高清在线| 国产精品狼人色视频一区| 欧洲成人免费视频| 欧美专区在线视频| 日韩资源在线观看| 亚洲性无码av在线| 日韩美女在线观看一区| 国内精品小视频在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美理论电影网| 51久久精品夜色国产麻豆| 日韩电影在线观看免费| 久久久久久网站| 亚洲精品视频免费在线观看| 91精品久久久久久久久不口人| 精品在线观看国产| 欧美野外猛男的大粗鳮| 97人洗澡人人免费公开视频碰碰碰| 少妇高潮 亚洲精品| 欧美一级片久久久久久久| 久久频这里精品99香蕉| 精品自在线视频| 亚洲国产天堂久久综合网| 亚洲精品日韩丝袜精品| 精品二区三区线观看| 九九热这里只有在线精品视| 精品久久久久久中文字幕一区奶水| 亚洲第一在线视频| 久久精品久久精品亚洲人| 成人精品在线观看| 日韩视频免费在线| 日韩免费中文字幕| 亚洲影院色无极综合| 91精品在线观| 国内精品久久久久| 久久这里只有精品视频首页| 欧美巨大黑人极品精男| 久久精品国产久精国产一老狼| 久久亚洲影音av资源网| 国产成人精品免高潮在线观看| 操91在线视频| 久久精品一偷一偷国产| 精品伊人久久97| 久久久亚洲精品视频| 一本色道久久88综合亚洲精品ⅰ| 欧美性受xxx| 日韩色av导航| 日韩中文字幕免费看| 亚洲国产精品999| 国产91色在线| 中文字幕亚洲二区| 精品国产999| 疯狂做受xxxx欧美肥白少妇| 国产成人精品a视频一区www| 欧美成人精品h版在线观看| 日韩成人在线观看| 热久久视久久精品18亚洲精品| 欧美日韩成人网| 热久久免费国产视频| 成人福利在线视频| 日韩av在线免费观看一区| 久久久亚洲国产天美传媒修理工| 国产偷亚洲偷欧美偷精品| 国产成人精品久久二区二区91| 91情侣偷在线精品国产| 久久人人爽人人| 欧美亚州一区二区三区| 精品久久久香蕉免费精品视频| 亚洲福利视频网站| 大胆人体色综合| 性欧美亚洲xxxx乳在线观看| 欧美大尺度电影在线观看| 久久精品国亚洲| 91久久国产精品91久久性色| 欧美成人黄色小视频| 欧美最猛性xxxxx免费| 亚洲天堂免费视频| 亚洲一区二区久久久久久久| 国产亚洲成精品久久| 色香阁99久久精品久久久| 亚洲第一中文字幕在线观看| 精品少妇v888av| 欧美在线一区二区视频| 狠狠躁夜夜躁人人爽天天天天97| www.99久久热国产日韩欧美.com| 国产一区二区黄| 91探花福利精品国产自产在线| 国产日韩在线看片| 国产精品主播视频| 午夜精品久久久99热福利| 国产午夜精品视频| 成人精品视频在线| 久久99热精品这里久久精品| 国产在线观看精品一区二区三区| 日本中文字幕成人| 亚洲日本成人网| 亚洲第一福利网| 成人午夜在线视频一区| 欧美性高潮床叫视频| 亚洲国产成人在线播放| 懂色av一区二区三区| 一二美女精品欧洲|