【发布时间】:2015-08-26 18:50:59
【问题描述】:
如果行中的单元格包含特定值,我有以下方法,它只会从文件中删除行:
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文件的路径,当代码到达上面sn-p的最后一行时,会弹出一个对话框询问您是否要保存更改,就像您手动打开Excel一样,进行了更改,然后尝试将其关闭。如果我打开 Excel 并将 .csv 保存为 .xlsx 并在文件上重新运行此工具,它不会提示用户。
有人知道我可以如何防止这种情况吗?我使用 WinMerge 在 2 个文件夹上生成报告(另存为 CSV),然后在报告上运行此工具。如果不必手动将报表重新保存为“实际”Excel 类型,那就太好了。
【问题讨论】:
-
我认为您可以使用
SaveAsmethod 而不是Save方法,将Type.Missing传递给您不想设置的任何参数。此外,您可以在保存工作簿之前尝试设置Microsoft.Office.Interop.Excel.Application.[Your Excel App Variable Name].DisplayAlerts = False。您可能想在之后重新启用它。 -
@Soulfire 使用
SaveAs仍然提示用户,但按照您的建议设置DisplayAlerts解决了这个问题。如果您想提交它作为答案,我很乐意接受。