过滤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#中过滤列表(删除列中特定文本的所有项目),并最后写入干净的列表来优化。