Как удалить столбец из листа excel в epplus
Я использую csharp для вставки данных в лист excel в 7 столбцов. Интерфейс этой программы позволит пользователям выбрать 7 флажков. Если они выберут все 7, все 7 столбцов в spreadhseet будут иметь данные, если они выберут один флажок, то только один столбец будет иметь данные. У меня есть цикл for, который проверит, есть ли данные, если нет данных, я хочу удалить этот столбец в epplus. Вот предыдущее обсуждение этой темы: Как удалить столбец XLSX-файла с помощью EPPlus в веб-приложении Это тихий старый, поэтому я просто хочу проверить, есть ли способ сделать это. Или есть способ привести лист epplus excel к листу Microsoft interop excel и выполнить некоторые операции.
В настоящее время у меня такой код:
for(int j=1; j <= 9; j++) //looping through columns
{
int flag = 0;
for(int i = 3; i <= 10; i++) // looping through rows
{
if(worksheet.cells[i, j].Text != "")
{
flag ++;
}
}
if (flag == 0)
{
worksheet.column[j].hidden = true; // hiding the columns- want to remove it
}
}
можем ли мы сделать что-то вроде:
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
xlApp = worksheet; (where worksheet is epplus worksheet)
1 ответов
вы используете EPPlus 4? Возможность вставлять и удалять столбцы была добавлена с новой моделью хранилища ячеек, которую они реализовали. Итак, теперь вы можете сделать что-то вроде этого:
[TestMethod]
public void DeleteColumn_Test()
{
//http://stackoverflow.com/questions/28359165/how-to-remove-a-column-from-excel-sheet-in-epplus
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
//Throw in some data
var datatable = new DataTable("tblData");
datatable.Columns.Add(new DataColumn("Col1"));
datatable.Columns.Add(new DataColumn("Col2"));
datatable.Columns.Add(new DataColumn("Col3"));
for (var i = 0; i < 20; i++)
{
var row = datatable.NewRow();
row["Col1"] = "Col1 Row" + i;
row["Col2"] = "Col2 Row" + i;
row["Col3"] = "Col3 Row" + i;
datatable.Rows.Add(row);
}
using (var pack = new ExcelPackage(existingFile))
{
var ws = pack.Workbook.Worksheets.Add("Content");
ws.Cells.LoadFromDataTable(datatable, true);
ws.DeleteColumn(2);
pack.SaveAs(existingFile);
}
}