1. 程式人生 > 其它 >NPOI插入圖片到excel指定單元格

NPOI插入圖片到excel指定單元格

https://www.cnblogs.com/wei325/p/4748324.html

下載NPOI元件(2.0以上支援.xlsx和.xls的excel,2.0以下只支援.xls)
NPOI下載官網http://npoi.codeplex.com

下載解壓,裡面有個dotnet4的資料夾,把它拖到自己的專案中,把裡面的.dll全部新增引用

引入全名空間:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

程式碼

複製程式碼
//建立一個工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//建立一個sheet
ISheet sheet1 = workbook.CreateSheet("sheet1");
// 設定列寬,excel列寬每個畫素是1/256
sheet1.SetColumnWidth(0, 18 * 256);
sheet1.SetColumnWidth(1, 18 * 256);
IRow rowHeader = sheet1.CreateRow(0);//建立表頭行
rowHeader.CreateCell(0, CellType.STRING).SetCellValue("生產單號");
rowHeader.CreateCell(1, CellType.STRING).SetCellValue("圖片");
DataTable dt = sqlhelperPro.seachData("SELECT top 3 PRODID,KTL_PIC FROM Long_tmpPIC");
if (dt.Rows.Count > 0)
{
int rowline = 1;//從第二行開始(索引從0開始)
foreach (DataRow datarow in dt.Rows)
{
IRow row = sheet1.CreateRow(rowline);
//設定行高 ,excel行高度每個畫素點是1/20
row.Height = 80 * 20;
//填入生產單號
row.CreateCell(0, CellType.STRING).SetCellValue(datarow["PRODID"].ToString());
//將圖片檔案讀入一個字串
byte[] bytes = System.IO.File.ReadAllBytes(datarow["KTL_PIC"].ToString());
int pictureIdx=workbook.AddPicture(bytes,PictureType.JPEG);
HSSFPatriarch patriarch = (HSSFPatriarch)sheet1.CreateDrawingPatriarch();
// 插圖片的位置 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) 後面再作解釋
HSSFClientAnchor anchor = new HSSFClientAnchor(70, 10,0,0, 1,rowline, 2, rowline +1);
//把圖片插到相應的位置
HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
rowline++;
}
}
//把檔案儲存到d:\aaa.xls,注意副檔名是.xls不要寫成.xlsx
using (Stream stream = File.OpenWrite("d:\aaa.xls"))
{
workbook.Write(stream);
}

//如果要操作.xlsx的excel,引入名稱空間 using NPOI.XSSF.UserModel;
// 然後把所有的HSS改為XSS(比喻HSSWorkbook->XSSWorkbook)

複製程式碼

引數的解析: HSSFClientAnchor(int dx1,int dy1,int dx2,int dy2,int col1,int row1,int col2,int row2)

dx1:圖片左邊相對excel格的位置(x偏移) 範圍值為:0~1023;即輸100 偏移的位置大概是相對於整個單元格的寬度的100除以1023大概是10分之一

dy1:圖片上方相對excel格的位置(y偏移) 範圍值為:0~256 原理同上。

dx2:圖片右邊相對excel格的位置(x偏移) 範圍值為:0~1023; 原理同上。

dy2:圖片下方相對excel格的位置(y偏移) 範圍值為:0~256 原理同上。

col1和row1 :圖片左上角的位置,以excel單元格為參考,比喻這兩個值為(1,1),那麼圖片左上角的位置就是excel表(1,1)單元格的右下角的點(A,1)右下角的點。

col2和row2:圖片右下角的位置,以excel單元格為參考,比喻這兩個值為(2,2),那麼圖片右下角的位置就是excel表(2,2)單元格的右下角的點(B,2)右下角的點。

以上純屬個人開發經驗歡迎指正

NPOI 用法可參考官網(中文) http://tonyqus.sinaapp.com/