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