【问题标题】:Excel Generated by EPPlus is CorruptedEPPlus 生成的 Excel 已损坏
【发布时间】:2020-02-13 02:44:41
【问题描述】:

我正在使用以下代码使用 EPplus 将背景图像添加到 Excel。该文档在 Polaris Office 中打开正常,但使用 Excel 时出现以下错误

我们发现“filename.xlsx”中的某些内容存在问题。你想尽量恢复吗

代码

 foreach (var file in Filelist)
                {

                    // Load workbook
                    //var fileInfo = new FileInfo(@file);
                    FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

                    //ExcelPackage pkg = new ExcelPackage(fs);

                    using (var package = new ExcelPackage(fs))
                    {

                        // Itterate through workbook sheets
                        foreach (var sheet in package.Workbook.Worksheets)
                        {

                            sheet.BackgroundImage.Image = bmp;
                            sheet.Protection.IsProtected = false;

                        }

                        package.SaveAs(new FileInfo(Path.GetFileNameWithoutExtension(file)+".xlsx"));
                    }
                    fs.Close();
                }

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

更新: 位图生成代码

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

【问题讨论】:

  • 也许你应该把你的FileStream 也放在using 声明中,但是我怀疑这是个问题
  • @MichaelRandall 试过了,没有解决问题。
  • 当我使用“e2”的 NumberFormat 时出现此错误。我需要用科学计数法格式化一些数字。
  • @KenWhite 我不在任何地方使用数字格式...该评论来自其他用户...
  • 通常帮助我解决这些问题的方法是在 Excel 本身中完成,然后比较 zip 包中的两个 xml 文件 - 这通常会为我指明解决方案

标签: c# .net excel ms-office epplus


【解决方案1】:

在我的示例中运行良好:

class EPPTest
{
public void CreateExcel(string filename)
{
    var fi = new FileInfo(filename);

    using (var excel = new ExcelPackage(fi) )
    using (var img = CreateImage() )
    {
        if( excel.Workbook.Worksheets.Count == 0 )
        {
            excel.Workbook.Worksheets.Add("MySheet");
        }

        foreach (var sheet in excel.Workbook.Worksheets)
        {

            sheet.BackgroundImage.Image = img;
            sheet.Protection.IsProtected = false;

        }

        excel.Save();// As(new FileInfo(Path.GetFileNameWithoutExtension(file) + ".xlsx"));
    }
}

public Image CreateImage()
{
    Bitmap img = new Bitmap(400, 400);

    using (Graphics g = Graphics.FromImage(img))
    using ( Font f = new Font("Tahoma", 80))
    {
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        SizeF textSize = g.MeasureString("Sample", f);
        g.DrawString("Sample", f, Brushes.Red, 0, (textSize.Height ));
    }

    return img;
}

}

这是输出:

【讨论】:

  • 谢谢.. 生成图像的背景是黑色的吗?
  • 您使用的是 Microsoft Excel 吗?
  • 是的 - 关于后面:我使用你的代码生成图像,但这可能是受我使用的黑暗主题的影响
  • 这对您有帮助吗?
  • 为什么要投反对票?这是一个我证明有效的新创建文件的正确示例?
猜你喜欢
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2019-02-02
  • 2020-12-29
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多