gpt4 book ai didi

c# - 使用带有 EPPlus 的模板创建和保存的 .xlsx 不可读/损坏

转载 作者:太空狗 更新时间:2023-10-29 20:07:39 25 4
gpt4 key购买 nike

问题

我正在尝试创建一个小程序,该程序使用 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;
}
}
}
}

我尝试过的事情:

  • 更改模板中各个单元格的值。
  • 保 stub 据模板创建的 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

最佳答案

简答:

EPPlus 库不支持从现有的 xltx Excel 模板创建文件。

改用预格式化的 xlsx 文件。

长答案:

Dim excelFile As New FileInfo(filename)
Dim reportTemplate As New FileInfo(templatePath)
Dim xlFile As ExcelPackage = New ExcelPackage(excelFile, reportTemplate)

' Do Stuff

xlFile.Save()

当使用 EPPlus 实例化一个新的 ExcelPackage 对象时,你应该能够提供一个模板作为第二个参数(见上面的代码片段),但是当为它提供一个 xltx 文件时,我一直得到一个损坏的输出文件,就像上面的用户。我最终发现提供一个常规的 xlsx 文件作为模板,而不是一个实际的模板文件,似乎可以工作。

这是一个开源包,所以我决定快速浏览一下源代码。

看起来像接受"template"参数的ExcelPackage构造函数,调用了CreateFromTemplate()方法。对 CreateFromTemplate() 方法的注释指出,它希望将 existing xlsx 文件用作模板,而不是实际的模板文件。

因此,虽然人们可能会认为"template"参数指的是实际的 xltx 模板文件,但 EPPlus 似乎不支持这一点。

关于c# - 使用带有 EPPlus 的模板创建和保存的 .xlsx 不可读/损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com