Проблема
Я пытаюсь создать небольшую программу, которая использует шаблон Excel для создания документа Excel, а затем записывает в несколько ячеек, используя EPPlus. К сожалению, файлы кажутся поврежденными независимо от того, что я пытаюсь сделать.
Мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OfficeOpenXml;
using System.IO;
namespace ConsoleApplication9
{
public sealed class ExcelSerialize
{
private readonly List<Tuple<string, string>> Results;
private readonly string Directory;
private ExcelPackage package;
public ExcelSerialize(List<Tuple<string, string>> Results, string Directory)
{
this.Results = Results;
this.Directory = Directory;
}
public bool WriteResults()
{
FileInfo template = new FileInfo(Directory);
using (package = new ExcelPackage(template, true))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
//foreach (Tuple<string, string> Result in Results)
//{
// worksheet.Cells[Result.Item1].Value = Result.Item2;
//}
string file = string.Format(System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"results\results" + System.DateTime.Now.ToString().Replace(" ", "").Replace("/", "_").Replace(":", "-") + ".xlsx");
Byte[] bin = package.GetAsByteArray();
File.WriteAllBytes(file, bin);
return true;
}
}
}
}
Что я пробовал:
- Изменение значений различных ячеек в шаблоне.
- Сохранение документа Excel, созданного на основе шаблона, без записи в него новых данных.
- Создание базового шаблона с ячейками A1, A2 и A3, содержащими «ТЕСТ», и никаких других изменений вместо более сложного шаблона, который я собираюсь использовать.
- Сохранение с помощью
Package.SaveAs()
. - Сохранение с использованием массива байтов, показанного в примере кода.
- Компиляция EPPlus из последнего исходного кода, предоставленного на Codeplex.
Вещи, которые работают:
- Создание нового файла с использованием следующего кода:
using (package = new ExcelPackage(string.Format(System.AppDomain.CurrentDomain.BaseDirectory.ToString() + @"results\results" + System.DateTime.Now.ToString().Replace(" ", "").Replace("/", "_").Replace(":", "-") + ".xlsx"))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Test");
worksheet.Cells[A1].Value = "Test";
package.Save();
}
Примечания:
For whatever reason, the files saved still appear corrupt and can't be recovered. I'm currently using Microsoft Office 2010. The file formats I'm using are .xltx
and .xlsx
.