c# - Epplus 添加条码图片问题
问题描述
我正在尝试使用 Epplus 将 BarCode 插入到 excel 中的单元格中。
这是一个 ASP.NET MVC 项目。
使用以下代码。
using System.IO;
using System.Web.Mvc;
using EmployeeIDBarcodeGeneration.Models;
using OfficeOpenXml;
using ZXing;
public void ExportExcel()
{
List<EmployeeID> EmployeeIDs = new List<EmployeeID> {
new EmployeeID { EmployeeName="Employee A",EmployeeIDnumber="A222"},
new EmployeeID { EmployeeName ="Employee B", EmployeeIDnumber = "A333" },
new EmployeeID { EmployeeName ="Employee C", EmployeeIDnumber = "A444" }
};
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
ExcelPackage pck = new ExcelPackage();
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Report");
ws.Cells["A1"].Value = "EmployeeName";
ws.Cells["B1"].Value = "EmployeeIDnumber";
ws.Cells["C1"].Value = "Barcode";
int rowStart = 2;
BarcodeWriter bw = new BarcodeWriter();
bw.Format = BarcodeFormat.CODE_39;
bw.Options.Width = 200;
bw.Options.Height = 100;
bw.Options.PureBarcode = false;
foreach (var item in EmployeeIDs)
{
ws.Cells[string.Format("A{0}", rowStart)].Value = item.EmployeeName;
ws.Cells[string.Format("B{0}", rowStart)].Value = item.EmployeeIDnumber;
Bitmap bitmap = bw.Write(item.EmployeeIDnumber);
var picture = ws.Drawings.AddPicture(item.EmployeeIDnumber, bitmap);
ws.Cells[string.Format("C{0}", rowStart)].Value = picture;
rowStart++;
}
ws.Cells["A:AZ"].AutoFitColumns();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("content-disposition", "attachment;filename=" + "ExcelReport.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
Response.End();
}
但条形码图像无法正确放置在单元格中。
我该怎么办 ?
谢谢 !!
解决方案
您需要设置图表位置:
picture.SetPosition(rowStart-1, 0, 2, 0);
这是完整的代码:
public void DownloadExcelFile()
{
List<EmployeeID> EmployeeIDs = new List<EmployeeID> {
new EmployeeID { EmployeeName="Employee A",EmployeeIDnumber="A222"},
new EmployeeID { EmployeeName ="Employee B", EmployeeIDnumber = "A333" },
new EmployeeID { EmployeeName ="Employee C", EmployeeIDnumber = "A444" }
};
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
ExcelPackage pck = new ExcelPackage();
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Report");
ws.Cells["A1"].Value = "EmployeeName";
ws.Cells["B1"].Value = "EmployeeIDnumber";
ws.Cells["C1"].Value = "Barcode";
int rowStart = 2;
BarcodeWriter bw = new BarcodeWriter();
bw.Format = BarcodeFormat.CODE_39;
bw.Options.Width = 200;
bw.Options.Height = 40;
bw.Options.PureBarcode = false;
foreach (var item in EmployeeIDs)
{
string STsrc = "/Home/BarCodeImg?code=" + item.EmployeeIDnumber + "&width=300&height=50";
ws.Cells[string.Format("A{0}", rowStart)].Value = item.EmployeeName;
ws.Cells[string.Format("B{0}", rowStart)].Value = item.EmployeeIDnumber;
Bitmap bitmap = bw.Write(item.EmployeeIDnumber);
var picture = ws.Drawings.AddPicture(item.EmployeeIDnumber, bitmap);
picture.SetPosition(rowStart-1, 0, 2, 0);
rowStart++;
}
ws.Cells["A:AZ"].AutoFitColumns();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("content-disposition", "attachment;filename=" + "ExcelReport.xlsx");
Response.BinaryWrite(pck.GetAsByteArray());
Response.End();
}
推荐阅读
- java - 如何在肥皂网络服务中为单个请求获得两个响应
- hyperledger-fabric - Hyperledger Fabric:物联网用例
- sql-server - 变量作为运算符 mssql
- python - 通过将旧值连接到另一个值来更新所有值数据框 Pandas
- python - Python df groupby 带有用于字符串和总和的 agg
- xml - 在定期更新的 XSD 中替换 xsd:choice
- python - pd.to_datetime 命令月份错误
- python - 哪个文件包含我的深度学习保存模型?
- c# - 升级到生产计划时 Azure 应用服务不工作
- tensorflow - tf.keras.layers.Concatenate() 使用列表但在张量元组上失败