Это определенно что-то есть. Я смог воспроизвести его сам. Это связано с созданной вами таблицей. если вы откроете файл и удалите его с помощью параметра «Преобразовать в диапазон» на вкладке «Инструменты таблицы», проблема исчезнет.
Я посмотрел исходный код и извлекал файлы xml на уровне zip и не видел никаких указаний на то, что он действительно возился с ними, - казалось, была прямой копией.
Очень странно, потому что если мы создадим и сохраним файл xlsx, включая таблицу из EPPlus, проблема там не будет. Это работает просто отлично:
[TestMethod]
public void Template_Copy_Test()
{
//http://stackoverflow.com/questions/28722945/epplus-with-a-template-is-not-working-as-expected
const string templatePath = "c:\\temp\\testtemplate.xlsx"; // the path of the template
const string resultPath = "c:\\temp\\result.xlsx"; // the path of our result
//Throw in some data
var dtdata = new DataTable("tblData");
dtdata.Columns.Add(new DataColumn("Col1", typeof(string)));
dtdata.Columns.Add(new DataColumn("Col2", typeof(int)));
dtdata.Columns.Add(new DataColumn("Col3", typeof(int)));
for (var i = 0; i < 20; i++)
{
var row = dtdata.NewRow();
row["Col1"] = "String Data " + i;
row["Col2"] = i * 10;
row["Col3"] = i * 100;
dtdata.Rows.Add(row);
}
var templateFile = new FileInfo(templatePath);
if (templateFile.Exists)
templateFile.Delete();
using (var pck = new ExcelPackage(templateFile))
{
var ws = pck.Workbook.Worksheets.Add("Data");
ws.Cells["A1"].LoadFromDataTable(dtdata, true);
for (var i = 2; i <= dtdata.Rows.Count + 1; i++)
ws.Cells[i, 4].Formula = String.Format("{0}*{1}", ExcelCellBase.GetAddress(i, 2), ExcelCellBase.GetAddress(i, 3));
ws.Tables.Add(ws.Cells[1, 1, dtdata.Rows.Count + 1, 4], "TestTable");
pck.Save();
}
using (var pck = new ExcelPackage(new FileInfo(resultPath), templateFile)) // creating a package with the given template, and our result as the new stream
{
// note that I am not doing any work ...
pck.Save(); // savin our work
}
}
НО .....
Если мы открываем testtemplate.xlsx
, удалить таблицу, сохранить/закрыть файл, открыть заново, и снова вставить точно такую же таблицу проблемных шоу когда вы запустите это:
[TestMethod]
public void Template_Copy_Test2()
{
//http://stackoverflow.com/questions/28722945/epplus-with-a-template-is-not-working-as-expected
const string templatePath = "c:\\temp\\testtemplate.xlsx"; // the path of the template
const string resultPath = "c:\\temp\\result.xlsx"; // the path of our result
var templateFile = new FileInfo(templatePath);
using (var pck = new ExcelPackage(new FileInfo(resultPath), templateFile)) // creating a package with the given template, and our result as the new stream
{
// note that I am not doing any work ...
pck.Save(); // savin our work
}
}
Он должен быть что-то хоронили в своих методах копирования на молнии, но я ничего не прыгнул на меня.
Но по крайней мере вы можете видеть, как обходить вокруг него.
Эрни
Какую версию EpPlus вы используете?Это похоже на проблему EpPlus и, возможно, стоит опубликовать ее в [соответствующем разделе проекта] (http://epplus.codeplex.com/workitem/list/basic). – Deilan
Я использую версию 4.0.3 –
Откройте файл шаблона с помощью Excel 2007 и сохраните его под другим именем файла. Затем используйте новый файл, используя тот же рабочий процесс, который вы описали в сообщении. Воспроизводит ли он? – Deilan