问题
我正在尝试创建一个小程序,该程序使用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文档,而不向其中写入任何新数据。
- 创建一个基本模板,其中包含“TEST”的单元格 A1、A2 和 A3,并且没有其他编辑,而不是我打算使用的更复杂的模板。
- 保存使用
Package.SaveAs()
. - 使用示例代码中的字节数组保存。
- 从 Codeplex 上提供的最新源编译 EPPlus。
有效的东西:
- 使用以下代码创建一个新文件:
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();
}
笔记:
无论出于何种原因,保存的文件仍然显示已损坏且无法恢复。我目前正在使用Microsoft Office 2010。我使用的文件格式是.xltx
和.xlsx
.