表格图片导入导出
导出
实现过程简述:
1.引用 NPOI.XSSF
2.使用 XSSFWorkbook工作簿类方法 创建表单
3.获取图片文件流数据 并插入sheet表格对应位置
4.使用 MemoryStream 把 工作簿对象 生成 .xlsx 文件
实现代码:
//创建一个工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个表单
ISheet sheet1 = workbook.CreateSheet("sheet1");
//获取图片数据
byte[] bytes = DbFile.GetContent(db, tenantId, fielId);
var pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);
XSSFDrawing patriarch = (XSSFDrawing)sheet1.CreateDrawingPatriarch();
XSSFClientAnchor anchor = new XSSFClientAnchor(70, 10, 0, 0, 4, rowline, 5, rowline + 1);
//把图片插到相应的位置
XSSFPicture pict = (XSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
//插入设置注释:
/*
* * 插图片的位置 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,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)右下角的点。
*/
//转为excel表格文件
using (MemoryStream stream = new MemoryStream())
{
workbook.Write(stream);
var a = stream.ToArray();
return new FileResult(stream.ToArray(), "物资采购.xlsx", "xlsx");
}
功能实现位置:老版项目-》CloudSchools.MMWebApi-》Api-》BuyBillApi.cs-》ExportRecord()
导入
实现过程简述:
1.引用
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
2.创建工作簿 获取带有图片的xlsx表格sheet1 (表格每行带有图片和图片对应标识)
3.获取图片数据,存入dbfile,获取图片Id.根据图片对应标识,把图片Id存入对应关联记录即可
实现代码:
//using Spire.Xls; 引入包
static void Main(string[] args)
{
//获取图片存储表格文件
var file = new FileStream("C:/商品信息/上传图片.xlsx", FileMode.Open, FileAccess.Read);
{
//用图片表格文件创建工作簿
var xssfworkbook = new XSSFWorkbook(file);
ISheet sheet = xssfworkbook.GetSheet("sheet1");
//获取所有图片 GetAllPictureInfos()是获取所有图片的方法 具体写在控制台了,这里不粘贴详细代码
var pictures = GetAllPictureInfos(sheet);
using (var db = DbFactory.GetTenantDb(tenantId))
{
foreach(var item in pictures)
{
//这里是获取 图片所在行(item.MinRow)的 索引标签
var cellValue = sheet.GetRow(item.MinRow).GetCell(0).StringCellValue;
//获取图片数据流
var data = item.PictureData;
//接下来就是保存图片获取图片ID ,存入索引关联记录
//代码省略
}
}
}
}
功能实现位置:老版项目-》控制台-》ConsoleApps->ParsePicture