問題
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 に「TEST」を含み、その他の編集を行わない基本的なテンプレートを作成します。
- を使用して保存し
Package.SaveAs()
ます。 - サンプル コードに見られる Byte 配列を使用して保存します。
- 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
.