麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

NPOI 2.0 Excel讀取顯示

2019-11-17 01:25:59
字體:
供稿:網(wǎng)友

NPOI 2.0 Excel讀取顯示

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

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

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

詳情請(qǐng)看官網(wǎng):點(diǎn)擊此處

假設(shè)一下是excel 文件的 Sheet1頁,轉(zhuǎn)換成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

后臺(tái)代碼:

    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開頭的對(duì)象。                 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的最大行數(shù)                 int colsCount = xsheet.GetRow(0).PhysicalNumberOfCells;//取得Excel的列數(shù)                 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某個(gè)TD合并的列數(shù)和行數(shù)等信息。與Excel中對(duì)應(yīng)Cell的合并行數(shù)和列數(shù)一致。                         GetTdMergedInfo(xsheet, rowIndex, colIndex, out colSpan, out rowSpan, out isByRowMerged);                         //被合并的行或列不輸出的處理方式不一樣                         //如果已經(jīng)被 行 合并包含進(jìn)去了就不輸出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個(gè)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某個(gè)TD合并的列數(shù)和行數(shù)等信息。與Excel中對(duì)應(yīng)Cell的合并行數(shù)和列數(shù)一致。         /// </summary>         /// <param name="rowIndex">行號(hào)</param>         /// <param name="colIndex">列號(hào)</param>         /// <param name="colspan">TD中需要合并的行數(shù)</param>         /// <param name="rowspan">TD中需要合并的列數(shù)</param>         /// <param name="isByRowMerged">此單元格是否被某個(gè)行合并包含在內(nèi)。如果被包含在內(nèi),將不輸出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;//取得合并單元格的個(gè)數(shù)             //Region region;             for (int i = 0; i < regionsCuont; i++)             {                 //region = xsheet.GetMergedRegionAt(i); 此方法為1.2版本,高版本已去掉                 CellRangeAddress range = xsheet.GetMergedRegion(i);//取得第i個(gè)合并單元格的跨越范圍                 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;                 }             }         }

前臺(tái)代碼:

function ExcelDataBind(data) {    var data = result.Data.toJSON() //此處拿到后臺(tái)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>';       //以下特殊業(yè)務(wù)需要,請(qǐng)參考自己邏輯修改        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 里的數(shù)據(jù)轉(zhuǎn)化成json格式(如下),因?yàn)檫€有別的用處,所以就沒直接轉(zhuǎn)換成Html的table。如果想直接轉(zhuǎn)換成Table,請(qǐng)參考官網(wǎng)例子

[[{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
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品视频一区二区三区综合 | 成人一级免费 | 日本道中文字幕 | 色视频在线播放 | 亚洲一区二区 | 伊人yinren22综合网色 | 国产欧美日韩在线不卡第一页 | 成人国产精品一区 | 免费人成年短视频在线观看网站 | 久草视频手机在线观看 | 蜜桃网在线观看 | 美女污污视频在线观看 | 91精品国产91久久久久久 | 日韩精品中文字幕在线播放 | 色av成人天堂桃色av | 久久久久亚洲视频 | 成人午夜免费看 | 国产欧美精品综合一区 | 中文字幕观看 | 久久精品欧美电影 | 视频在线91| 国产精品片一区二区三区 | 可以看毛片的网址 | av成人免费观看 | 污视频在线看 | 国产精品成人免费一区久久羞羞 | 亚洲欧美日韩中文在线 | 青青国产在线视频 | 黄色成人在线 | 高清一区二区在线观看 | 国产色91| 免费午夜视频 | 国产超碰人人爽人人做人人爱 | 欧美国产免费 | av在线免费观看国产 | 91一级毛片 | 精品国产一区在线观看 | 毛片一区二区三区 | 九九热国产视频 | 国产亚洲综合一区二区 | 成人午夜免费看 |