Excel, созданный EPPlus, поврежден - PullRequest
4 голосов
/ 13 февраля 2020

Я использую следующий код для добавления фонового изображения в Excel с помощью EPplus. Документ отлично открывается в офисе polaris, но при использовании 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, некоторые упоминали, что проблема может быть связана с многократным сохранением. Я удостоверился, что L oop ударил только один раз для одного файла.

Обновление: код для создания растрового изображения

 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));
            }

1 Ответ

0 голосов
/ 18 февраля 2020

Работает нормально в моем примере:

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;
}

}

Вот вывод: Sample screenshot

...