我想在C#EPPlus中通过可打印的Excel工作表添加一张图片(显示“DRAFT”)。
我需要知道在打印时是否有办法找到工作表每个页面的最后一个可见行。我不能假装它总是每页的行数固定,因为它取决于单元格的内容。
这是我当前使用每页固定行数(30)插入图像的代码。这导致每个可打印页面大约有一个图像,除了在每个新页面中图像不在同一位置。 (稍微关闭,取决于细胞的含量。)
public void InsertDraftImage(ExcelWorksheet worksheet, FileInfo draft_image)
{
int maxRowNumber = worksheet.Dimension.End.Row;
int rowByPage = 30;
int numberOfPage = (maxRowNumber / rowByPage) + 1;
ExcelPicture picture = null;
for(int i = 0; i < numberOfPage; i++)
{
if(draft_image != null)
{
picture = worksheet.Drawings.AddPicture(i.ToString(), draft_image);
picture.SetSize(609, 545); //original image size
picture.SetPosition(i * rowByPage, 0, 1, 0);
picture.EditAs = eEditAs.Absolute;
}
}
答案 0 :(得分:1)
尝试在&#39; ExcelHeaderFooter.cs&#39;中实现丢失的代码来自EPPlus的同事没有成功,我们最终按照Ernie的建议做了!!
我的最终代码是将图片插入到使用C#中的EPPlus生成的可打印excel文件的每个页面中。
通过在页脚中添加图片并将布尔值ScaleWithDoc设置为false(默认值= true)来完成。
public void InsertDraftImage(ExcelWorksheet worksheet, FileInfo draft_image)
{
ExcelHeaderFooterText footer = worksheet.HeaderFooter.OddFooter; //all page have same footer
footer.InsertPicture(draft_image, PictureAlignment.Centered);
}
在我的方法中添加了此代码以创建ExcelWorksheet(所有其他excel样式,填充,设置)。
XmlAttribute temp = worksheet.WorksheetXml.CreateAttribute("scaleWithDoc");
temp.Value = "0";
worksheet.WorksheetXml.GetElementsByTagName("headerFooter")[0].Attributes.Append(temp);
package.Save();