过滤excel表
问题描述:
我有一个打开的excel表,我刚刚写过,使用Microsoft.Office.Interop.Excel
。现在我想删除某些列中具有特定值的行。例如,删除名为col
的列中包含文本blah blah
的所有行。任何想法如何做到这一点?谢谢!过滤excel表
答
我的建议是在您创建工作表时传递给Excel Interop应用程序的数据集中删除数据(如果删除行的意思在胖记录中)。我对你所需要的假设是删除整个行,其中该文本出现在名为“col”的列中。
例如:如果你传递一个DataTable
你可以运行过滤器或将它传递给excel表
var dataTable = dataBase.FetchData(runDate.ToShortDateString());
DataTable fitleredDataTable = dataTable.Select("(col != 'blah blah')").CopyToDataTable();
var application = new Application();
var workbook = application.Workbooks.Add();
var worksheet = (Worksheet)workbook.Sheets[1];
var columns = fitleredDataTable.Columns.Count;
var rows = fitleredDataTable.Rows.Count;
var range = worksheet.Range["A2", String.Format("{0}{1}", GetExcelColumnName(columns), rows)];
var data = new object[rows, columns];
for (int i = 1; i < fitleredDataTable.Columns.Count; i++)
{
worksheet.Cells[1, i] = fitleredDataTable.Columns[i - 1].ColumnName;
}
for (int rowNumber = 0; rowNumber < rows; rowNumber++)
{
for (int columnNumber = 0; columnNumber < columns; columnNumber++)
{
data[rowNumber, columnNumber] = fitleredDataTable.Rows[rowNumber][columnNumber].ToString();
}
}
range.Value = data;
当然,你也可以过滤它在你存储过程或SQL查询之前从该对象中删除。
答
也许你应该考虑在把它们写入excel表单之前过滤掉这些行。通过这种方式,您可以摆脱书写,再读取和删除行的额外工作。因此,你将获取你的数据(无论它来自哪里),在c#中过滤列表(删除列中特定文本的所有项目),并最后写入干净的列表来优化。