.net EPPlus生成的Excel已损坏

vpfxa7rd  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(179)

我使用以下代码使用EPPlus将背景图像添加到Excel中。文档在polaris office中打开正常,但使用Excel时出现此错误
我们发现“filename.xlsx”中的某些内容有问题。是否要尝试尽可能多地恢复
代码:

  1. foreach (var file in Filelist)
  2. {
  3. // Load workbook
  4. //var fileInfo = new FileInfo(@file);
  5. FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  6. //ExcelPackage pkg = new ExcelPackage(fs);
  7. using (var package = new ExcelPackage(fs))
  8. {
  9. // Iterate over workbook sheets
  10. foreach (var sheet in package.Workbook.Worksheets)
  11. {
  12. sheet.BackgroundImage.Image = bmp;
  13. sheet.Protection.IsProtected = false;
  14. }
  15. package.SaveAs(new FileInfo(Path.GetFileNameWithoutExtension(file)+".xlsx"));
  16. }
  17. fs.Close();
  18. }

字符串
我检查了相关的SO问题,有些人提到这个问题可能是由于保存多次。我确保循环只对一个文件命中一次。

更新:位图生成代码:

  1. using (Graphics g = Graphics.FromImage(bmp))
  2. {
  3. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  4. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  5. SizeF textSize = g.MeasureString("Sample", new Font(DefaultFont.FontFamily, 80));
  6. g.DrawString("Sample", new Font("Tahoma", 80), Brushes.Red, -(textSize.Width / 2), -(textSize.Height / 2));
  7. }

5ktev3wc

5ktev3wc1#

在我的例子中工作得很好:

  1. class EPPTest
  2. {
  3. public void CreateExcel(string filename)
  4. {
  5. var fi = new FileInfo(filename);
  6. using (var excel = new ExcelPackage(fi) )
  7. using (var img = CreateImage() )
  8. {
  9. if( excel.Workbook.Worksheets.Count == 0 )
  10. {
  11. excel.Workbook.Worksheets.Add("MySheet");
  12. }
  13. foreach (var sheet in excel.Workbook.Worksheets)
  14. {
  15. sheet.BackgroundImage.Image = img;
  16. sheet.Protection.IsProtected = false;
  17. }
  18. excel.Save();// As(new FileInfo(Path.GetFileNameWithoutExtension(file) + ".xlsx"));
  19. }
  20. }
  21. public Image CreateImage()
  22. {
  23. Bitmap img = new Bitmap(400, 400);
  24. using (Graphics g = Graphics.FromImage(img))
  25. using ( Font f = new Font("Tahoma", 80))
  26. {
  27. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  28. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  29. SizeF textSize = g.MeasureString("Sample", f);
  30. g.DrawString("Sample", f, Brushes.Red, 0, (textSize.Height ));
  31. }
  32. return img;
  33. }

字符串
}
下面是输出:

展开查看全部

相关问题