Как мне написать этот синтаксис Excel Interop в синтаксисе EPPLUS

Кто-то предложил мне способ улучшить мой код, сделав его более управляемым с помощью объектов:

string[,] values = new string[15, 35];  //or objects
values[7, 7] = "2016";
values[7, 28] = drag24;
values[7, 33] = drag25;
values[10, 8] = digit1;
values[10, 11] = digit2;
// etc.

Range range = WS.Range[WS.Cells[1, 1], WS.Cells[15, 35]];
range.Value = values;

Его предложение, но поскольку я перешел с взаимодействия на EPPLUS, следующий синтаксис больше не работает.

Range range = WS.Range[WS.Cells[1, 1], WS.Cells[15, 35]];

Как бы это выглядело в рабочей форме в синтаксисе EPPLUS?

Заменить его на это не получилось и заменил все в листе:

ExcelRange range = WS.Cells["A1: AH106"]

Возможно, что-то вроде этого?

= sheet.Cells["A1:,12:12,14:14"]

person Aroueterra    schedule 10.02.2017    source источник
comment
Использование двухмерного строкового массива усложнит задачу, если вы захотите использовать методы EPPlul LoadFrom*. Лучше с какой-нибудь коллекцией коллекций. Но если вам нужно сохранить текущую структуру, просто прокрутите их самостоятельно, что в любом случае будет более эффективным.   -  person Ernie S    schedule 12.02.2017


Ответы (1)


Не уверен, что это именно то, что вы имеете в виду, но вот простой пример с настраиваемым объектом и массивами:

Объект испытаний:

class TestObject
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Заполнение листа настраиваемым объектом и массивами:

IEnumerable<TestObject> objectList = new List<TestObject>()
{
    { new TestObject() {Id = 0, Name = "zero" } },
    { new TestObject() {Id = 1, Name = "one" } }
};
var values = new List<object[]>()
{ 
    new string[] { "one", "two" }, 
    new string[] { "three", "four" }
};

using (var package = new ExcelPackage())
{
    var sheet = package.Workbook.Worksheets.Add("Sheet1");
    // note second parameter gives you headings
    sheet.Cells["A1"].LoadFromCollection<TestObject>(objectList, true);
    sheet.Cells["A4"].LoadFromArrays(values);
    File.WriteAllBytes(OUTPUT, package.GetAsByteArray());
}
person kuujinbo    schedule 10.02.2017
comment
Я читал об этом, и это действительно похоже на то, что я хочу, но я не был знаком с функцией IEnumerable за пределами Linq. Довольно ясно, что он делает, хотя так, как вы это написали, я попробую и посмотрю, что произойдет. - person Aroueterra; 11.02.2017