我有以下方法,如果行中的单元格包含特定值,则只删除文件中的行:
foreach (Excel.Range row in workSheet.UsedRange.Rows)
{
foreach (Excel.Range cell in row.Columns)
{
if (cell.Value == null)
continue;
string colVal = cell.Value.ToString().ToLower();
if (colVal.Contains(".zip") || colVal.Contains("bin") || colVal.Contains("debug") || colVal.Contains("release"))
{
Console.WriteLine(colVal);
rowIndices.Add(rowIndex);
}
}
rowIndex++;
}
rowIndices = rowIndices.OrderByDescending(i => i).ToList();
foreach (int i in rowIndices)
{
string rangeFormat = String.Format("{0}:{1}", "A" + i, "F" + i);
workSheet.get_Range(rangeFormat, Type.Missing).Delete(Excel.XlDeleteShiftDirection.xlShiftUp);
}
workBook.Save();
我传入.csv文件的路径,当代码到达上面代码段的最后一行时,会弹出一个对话框,询问您是否要保存更改,就像手动打开Excel一样,做了一个改变,然后试图关闭它。如果我打开Excel并将.csv保存为.xlsx并在文件上重新运行此工具,则不会提示用户。
任何人都知道如何防止这种情况发生?我使用WinMerge在2个文件夹上生成报告(以CSV格式保存),然后在报告上运行此工具。很高兴不必手动将报告重新保存为"实际" Excel类型。