這個是前端通過api將文件上傳至api中做處理,在后端做文件解析和處理
<form id="form-avatar" enctype="multipart/form-data"> <p>請選擇要上傳的文件:</p> <!--只能選擇單個個文件--> <p><input type="file" name="file" /></p> <!--同時選擇多個文件--> <p><input type="file" name="file" multiple="multiple" /></p> <p><input id="btn-avatar" type="button" value="上傳" /></p> </form> <script> $("#btn-avatar").click(function(){ $.ajax({ url : "/api/values", //指定得api地址,當前環境得api地址 data: new FormData($("#form-avatar")[0]), type : "POST", // 告訴jQuery不要去處理發送的數據,用於對data參數進行序列化處理 這里必須false processData : false, // 告訴jQuery不要去設置Content-Type請求頭 contentType : false, dataType:"json", success : function(json) { }, error : function(json) { } }); }); </script>
對應得Api,需要引用NPOI解析文件。(上傳)
public string Post() { HttpPostedFile file = HttpContext.Current.Request.Files[0]; //獲取上傳的文件 StringBuilder sbr = new StringBuilder(); Stream st = file.InputStream; IWorkbook wk = null; try { wk = new XSSFWorkbook(st); //把xls文件中的數據寫入wk中 } catch { return "文件格式不正確"; } for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中總共的表數 { ISheet sheet = wk.GetSheetAt(i); //讀取當前表數據 for (int j = 0; j <= sheet.LastRowNum; j++) //LastRowNum 是當前表的總行數 { IRow row = sheet.GetRow(j); //讀取當前行數據 if (row != null) { sbr.Append("-------------------------------------\r\n"); //讀取行與行之間的提示界限 for (int k = 0; k <= row.LastCellNum; k++) //LastCellNum 是當前行的總列數 { ICell cell = row.GetCell(k); //當前表格 if (cell != null) { sbr.Append(cell.ToString()); //獲取表格中的數據並轉換為字符串類型 } } } } } //string url = HttpContext.Current.Server.MapPath(@"~\App_Data\") + file.FileName;//文件上傳的位置 //if (string.IsNullOrEmpty(file.FileName) == false) //file.SaveAs(url);保存文件 ////讀取上傳的文件 //StringBuilder sbr = new StringBuilder(); //using (FileStream fs = File.OpenRead(url)) //打開Excel文件 //{ //} return sbr.ToString();//返回數據 }
將數據庫的文件導出顯示在頁面之中
//創建工作薄 var workbook = new HSSFWorkbook(); //創建表 var table = workbook.CreateSheet("joye.net"); //模擬20行20列數據 for (var i = 0; i < 20; i++) { var row = table.CreateRow(i); for (int j = 0; j < 20; j++) { var cell = row.CreateCell(j); cell.SetCellValue(j); } } //打開xls文件,如沒有則創建,如存在則在創建是不要打開該文件 using (var fs = File.OpenWrite(@"c:/joye.net.xls")) { workbook.Write(fs); //向打開的這個xls文件中寫入mySheet表並保存。 Console.WriteLine("生成成功"); }
簡單學習
/// <summary> /// 組裝workbook. /// </summary> /// <param name="dt">dataTable資源</param> /// <param name="columnHeader">表頭</param> /// <returns></returns> public static HSSFWorkbook BuildWorkbook1(DataTable dt, string columnHeader = "") { var workbook = new HSSFWorkbook();//創建工作鋪 ISheet sheet = workbook.CreateSheet(string.IsNullOrWhiteSpace(dt.TableName) ? "Sheet1" : dt.TableName); #region 文件屬性信息 { var dsi = PropertySetFactory.CreateDocumentSummaryInformation(); dsi.Company = "NPOI"; workbook.DocumentSummaryInformation = dsi; SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); si.Author = "文件作者信息"; si.ApplicationName = "創建程序信息"; si.LastAuthor = "最后保存者信息"; si.Comments = "作者信息"; si.Title = "標題信息"; si.Subject = "主題信息"; si.CreateDateTime = DateTime.Now; workbook.SummaryInformation = si; } #endregion var dateStyle = workbook.CreateCellStyle();//創建列樣式 var format = workbook.CreateDataFormat();//數據格式 dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");//設置日期顯示格式 //取得列寬 var arrColWidth = new int[dt.Columns.Count]; foreach (DataColumn item in dt.Columns) { arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length; } //獲取datatable的每行每列的數據顯示成中文,在獲取中文長度 encoding編碼文檔:https://www.cnblogs.com/renfeng/p/4397592.html for (var i = 0; i < dt.Rows.Count; i++) { for (var j = 0; j < dt.Columns.Count; j++) { //Encoding.GetEncoding(936)解碼 int intTemp = Encoding.GetEncoding(936).GetBytes(dt.Rows[i][j].ToString()).Length; if (intTemp > arrColWidth[j]) { arrColWidth[j] = intTemp; } } } int rowIndex = 0; foreach (DataRow row in dt.Rows) { #region 表頭 列頭 if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { sheet = workbook.CreateSheet(); } #region 表頭及樣式 { var headerRow = sheet.CreateRow(0); headerRow.HeightInPoints = 25; headerRow.CreateCell(0).SetCellValue(columnHeader); //CellStyle ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.Center;// 左右居中 headStyle.VerticalAlignment = VerticalAlignment.Center;// 上下居中 // 設置單元格的背景顏色(單元格的樣式會覆蓋列或行的樣式) headStyle.FillForegroundColor = (short)11; //定義font IFont font = workbook.CreateFont(); font.FontHeightInPoints = 20; font.Boldweight = 700; headStyle.SetFont(font); headerRow.GetCell(0).CellStyle = headStyle; sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dt.Columns.Count - 1)); } #endregion #region 列頭及樣式 { var headerRow = sheet.CreateRow(1); //CellStyle ICellStyle headStyle = workbook.CreateCellStyle(); headStyle.Alignment = HorizontalAlignment.Center;// 左右居中 headStyle.VerticalAlignment = VerticalAlignment.Center;// 上下居中 //定義font IFont font = workbook.CreateFont(); font.FontHeightInPoints = 10; font.Boldweight = 700; headStyle.SetFont(font); foreach (DataColumn column in dt.Columns) { headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName); headerRow.GetCell(column.Ordinal).CellStyle = headStyle; sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256); } } #endregion if (columnHeader != "") { //header row IRow row0 = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row0.CreateCell(i, CellType.String); cell.SetCellValue(dt.Columns[i].ColumnName); } } rowIndex = 2; } #endregion #region 內容 var dataRow = sheet.CreateRow(rowIndex); foreach (DataColumn column in dt.Columns) { var newCell = dataRow.CreateCell(column.Ordinal); string drValue = row[column].ToString(); switch (column.DataType.ToString()) { case "System.String"://字符串類型 newCell.SetCellValue(drValue); break; case "System.DateTime"://日期類型 DateTime dateV; DateTime.TryParse(drValue, out dateV); newCell.SetCellValue(dateV); newCell.CellStyle = dateStyle;//格式化顯示 break; case "System.Boolean"://布爾型 bool boolV = false; bool.TryParse(drValue, out boolV); newCell.SetCellValue(boolV); break; case "System.Int16"://整型 case "System.Int32": case "System.Int64": case "System.Byte": int intV = 0; int.TryParse(drValue, out intV); newCell.SetCellValue(intV); break; case "System.Decimal"://浮點型 case "System.Double": double doubV = 0; double.TryParse(drValue, out doubV); newCell.SetCellValue(doubV); break; case "System.DBNull"://空值處理 newCell.SetCellValue(""); break; default: newCell.SetCellValue(""); break; } } #endregion rowIndex++; } //自動列寬 for (int i = 0; i <= dt.Columns.Count; i++) sheet.AutoSizeColumn(i, true); return workbook; }
參考文檔