一 建立//讀取工做薄(xls/xlsx)html
IWorkbook workbook = new HSSFWorkbook(); //用於建立 .xls IWorkbook workbook= new XSSFWorkbook(); //用於建立 .xlsx //讀取 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 workbook = new XSSFWorkbook(fs); else if (fileName.IndexOf(".xls") > 0) // 2003版本 workbook = new HSSFWorkbook(fs);
二 建立/切換工做表數組
ISheet workbook = workbook.CreateSheet("SheetName"); //切換 ISheet sheet= workbook.GetSheet("SheetName");
三 建立/獲取Sheet中的Rowide
IRow row = sheet.CreateRow(0); //獲取row IRow row = sheet.GetRow(0);
四 建立/獲取單元格網站
ICell cell=row.CreateCell(0); //獲取 ICell cell= row.GetCell(0);
五 合併單元格code
sheet.AddMergedRegion(newCellRangeAddress(開始行,結束行,開始列,結束列));
六 設置列寬orm
sheet.SetColumnWidth(列索引,N*256) 第二個參數是列寬 單位是1/256個字符寬度
七 設置行高 Height的單位是1/20個點htm
row.Height=50*20; //設置高度爲50個點
八 設置樣式blog
ICellStyle bodyStyle = workbook2007.CreateCellStyle(); bodyStyle.Alignment =HorizontalAlignment.Center; bodyStyle.VerticalAlignment =VerticalAlignment.Center; IFont font1 = workbook.CreateFont(); font1.FontHeight = 10*20; font1.Color = HSSFColor.Red.Index;//字色 bodyStyle.SetFont(font1); sheet.CellStyle = bodyStyle;
九 設置單元格邊框索引
ICellStyle BorderStyle = myworkbook.CreateCellStyle(); BorderStyle .BorderBottom = BorderStyle.Thin;//設置單元格低邊框爲細線 //BorderStyle.Medium;【中等線】 //BorderStyle.Dashed;【虛線】 //BorderStyle.Dotted;【斑點線】 //BorderStyle.Thick;【粗線】 //BorderStyle.Double;【雙線】 //BorderStyle.Hair;【多點線】 //BorderStyle.MediumDashed;【中等虛線】 //BorderStyle.DashDot;【點線】 //BorderStyle.MediumDashDot;【中等點線】 //BorderStyle.DashDotDot;【雙點劃線】 //BorderStyle.MediumDashDotDot;【中等雙點劃線】 //BorderStyle.SlantedDashDot;【傾斜的點劃線】 ICellStyle BorderStyle1 = myworkbook.CreateCellStyle(); BorderStyle1.BorderDiagonalLineStyle = BorderStyle.Thin;//BorderDiagonalLineStyle對角線樣式 Thin細線 BorderStyle1.BorderDiagonal = BorderDiagonal.Backward;//反向【Forward正向;Both兩條線】 BorderStyle1.BorderDiagonalColor = IndexedColors.Red.Index;//紅線
十 設置單元格數字格式圖片
//建立CellStyle與DataFormat並加載格式樣式 IDataFormat dataformat = myworkbook.CreateDataFormat(); ICellStyle Numstyle = myworkbook.CreateCellStyle(); Numstyle.DataFormat = dataformat.GetFormat("[DbNum2][$-804]General");//轉化爲漢字大寫 // dataformat.GetFormat("0.0"); //改變小數精度【小數點後有幾個0表示精確到小數點後幾位】 //dataformat.GetFormat("#,##0.0");//分段添加,號 //dataformat.GetFormat("0.00E+00");//科學計數法 //dataformat.GetFormat("0.00;[Red]-0.00");//正數與負數的區分【負數爲紅色】 //dataformat.GetFormat("# ??/??");//整數部分+分數 //dataformat.GetFormat("??/??");//分數 //dataformat.GetFormat("0.00%");//百分數【小數點後有幾個0表示精確到顯示小數點後幾位】
十一 設置單元格時間格式
//建立CellStyle與DataFormat並加載格式樣式 IDataFormat dataformat = myworkbook.CreateDataFormat(); //【Tips】 // 1.yyyy 年份; yy 年份後兩位 // 2.MM 月份零起始;M 月份非零起始; mmm[英文月份簡寫];mmmm[英文月份全稱] // 3.dd 日零起始;d 日非零起始 // 4.hh 小時零起始;h 小時非零起始[用於12小時制][12小時制必須在時間後面添加 AM/PM 或 上午/下午] // 5.HH 小時零起始;H 小時非零起始[用於24小時制] // 6.mm 分鐘零起始;m 分鐘非零起始 // 7.ss 秒數零起始;s 秒數非零起始 // 8.dddd 星期;ddd 星期縮寫【英文】 // 9.aaaa 星期;aaa 星期縮寫【中文】 ICellStyle Timestyle = myworkbook.CreateCellStyle(); Timestyle.DataFormat = dataformat.GetFormat("yyyy年MM月dd日 aaaa");【2017年09月01日 星期五】 //dataformat.GetFormat("yyyy年MM月dd日 dddd");【2017年09月01年 Friday】 //dataformat.GetFormat("h:mm:ss AM/PM");【3:51:21 PM】 //dataformat.GetFormat("h:mm:ss 上午/下午");【3:51:21 下午】
十二 設置單元格文本格式
IDataFormat dataformat = myworkbook.CreateDataFormat(); ICellStyle Textstyle = myworkbook.CreateCellStyle(); Textstyle.DataFormat = dataformat.GetFormat("@");
十三 插入圖片
//第一步:讀取圖片到byte數組 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://img1.soufunimg.com/message/images/card/tuanproj/201511/2015112703584458_s.jpg"); byte[] bytes; using (Stream stream = request.GetResponse().GetResponseStream()) { using (MemoryStream mstream = new MemoryStream()) { int count = 0; byte[] buffer = new byte[1024]; int readNum = 0; while ((readNum = stream.Read(buffer, 0, 1024)) > 0) { count = count + readNum; mstream.Write(buffer, 0, 1024); } mstream.Position = 0; using (BinaryReader br = new BinaryReader(mstream)) { bytes = br.ReadBytes(count); } } } //第二步:將圖片添加到workbook中 指定圖片格式 返回圖片所在workbook->Picture數組中的索引地址(從1開始) int pictureIdx = myworkbook.AddPicture(bytes, PictureType.JPEG); //第三步:在sheet中建立畫部 IDrawing patriarch = mysheet.CreateDrawingPatriarch(); //第四步:設置錨點 (在起始單元格的X座標0-1023,Y的座標0-255,在終止單元格的X座標0-1023,Y的座標0-255,起始單元格行數,列數,終止單元格行數,列數) IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 0, 0, 0, 0, 2, 2); //第五步:建立圖片 IPicture pict = patriarch.CreatePicture(anchor, pictureIdx);
最後一步
FileStream file = new FileStream(@"D:\CreateExcel.xls", FileMode.Create); myworkbook.Write(file); file.Close();
示例代碼
//建立Xlsx工做薄 XSSFWorkbook workbook2007=new XSSFWorkbook(); //建立工做表 workbook2007.CreateSheet("第一個工做表"); //寫數據流程 讀取(或新建一個工做簿)->獲取工做表->對工做表添加行->對每一行添加單元格->對單元格賦值 //獲取工做表-第一個工做表 XSSFSheet sheet = (XSSFSheet) workbook2007.GetSheet("第一個工做表"); //建立一個標題(一行數據) sheet.CreateRow(0); //獲取第一行 XSSFRow Xr=(XSSFRow)sheet.GetRow(0); //建立11行單元格 XSSFCell[] SheetCell=new XSSFCell[11]; for (int i = 0; i < 11; i++) { SheetCell[i]=(XSSFCell)Xr.CreateCell(i); } //合併單元格 sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10)); //賦值 SheetCell[0].SetCellValue("這是標題"); //樣式 ICellStyle bodyStyle = workbook2007.CreateCellStyle(); bodyStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; bodyStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; IFont font1 = workbook2007.CreateFont(); font1.FontHeight = 10*20; font1.Color = HSSFColor.Red.Index;//字色 bodyStyle.SetFont(font1); SheetCell[0].CellStyle = bodyStyle; //保存 FileStream file2007 = new FileStream("Excel2007.xlsx", FileMode.Create); workbook2007.Write(file2007); file2007.Close(); workbook2007.Close();
參考網站:
https://www.cnblogs.com/zqyw/p/7462561.html
https://www.jianshu.com/p/6ccf675b362a
https://www.cnblogs.com/houlin/p/5202160.html