【问题标题】:Programatically making changes to an file using Excel prompts the user to save changes使用 Excel 以编程方式对文件进行更改会提示用户保存更改
【发布时间】: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 类型,那就太好了。

【问题讨论】:

  • 我认为您可以使用SaveAs method 而不是Save 方法,将Type.Missing 传递给您不想设置的任何参数。此外,您可以在保存工作簿之前尝试设置Microsoft.Office.Interop.Excel.Application.[Your Excel App Variable Name].DisplayAlerts = False。您可能想在之后重新启用它。
  • @Soulfire 使用SaveAs 仍然提示用户,但按照您的建议设置DisplayAlerts 解决了这个问题。如果您想提交它作为答案,我很乐意接受。

标签: c# .net excel csv


【解决方案1】:

您可以在保存之前将DisplayAlerts 属性设置为False

像这样:

Microsoft.Office.Interop.Excel.Application.[Your Excel App Variable Name].DisplayAlerts = False

【讨论】:

  • 非常感谢!永远不会猜到这样的标志存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多