过滤excel表

时间:2014-08-27 12:01:53

标签: c# excel ms-office office-interop

我使用Microsoft.Office.Interop.Excel创建了一个我刚刚写过的excel表。现在我想删除某些列中具有特定值的行。例如,删除名为blah blah的列中包含文本col的所有行。任何想法如何做到这一点?谢谢!

2 个答案:

答案 0 :(得分:3)

我的建议是在创建工作表时传递给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查询中过滤它。

答案 1 :(得分:0)

也许您应该考虑在将这些行写入excel表之前过滤掉这些行。这样你就可以摆脱额外的写作工作,然后再次阅读并删除行。

所以你要获取你的数据(无论它来自哪里),过滤c#中的列表(删除列中特定文本的所有项目),最后将清理列表写入excel。