【问题标题】:Save Overwrite and changes using Excel.Interop C#使用 Excel.Interop C# 保存覆盖和更改
【发布时间】:2018-03-22 13:32:30
【问题描述】:

全部,

我有下面的代码可以正常工作,但是我想保存(覆盖更改)而不是 SaveAs。据我所知, Close(True) 应该实现这一点,但它仍然为用户提供另存为选项。 :S

任何关于以下内容的帮助/建议将不胜感激。

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using Microsoft.Office.Interop.Excel;

namespace Dynamic.Script_8D58F1E2C23B36A
{
    // Script generated by Pega Robotics Studio 8.0.1072.0
    // Please use caution when modifying class name, namespace or attributes
    [OpenSpan.TypeManagement.DynamicTypeAttribute()]
    [OpenSpan.Design.ComponentIdentityAttribute("Script-8D58F1E2C23B36A")]
    public sealed class Script
    {
        public void deleterow(string WorkbookName2)
        {
            Microsoft.Office.Interop.Excel.Application myApp;
            Microsoft.Office.Interop.Excel.Workbook myWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
            Microsoft.Office.Interop.Excel.Range range;
            myApp = new Microsoft.Office.Interop.Excel.Application();
            myWorkBook = myApp.Workbooks.Open(WorkbookName2, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets.get_Item(1);
            range = (Microsoft.Office.Interop.Excel.Range)myWorkSheet.Application.Rows[1, Type.Missing];
            range.Select();
            range.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
            myWorkBook.Close(true);
            myApp.Quit();
        }
    }
}

【问题讨论】:

    标签: c# excel save


    【解决方案1】:

    所以你可以这样做来阻止 DisplayAlerts 的出现:

    myApp.DisplayAlerts = false;
    

    如果你想通过指定文件名来保存,你可以这样做:

    //specifying a file name
    myWorkSheet.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);
    myWorkBook.Close(true);
    

    或者您可以通过以下方式快速完成:

    myWorkBook.Close(SaveChanges:=True, Filename:=YourFileDirectory/FileName)
    

    如果您只想保存一个存在的文件而不指定文件目录/文件名。只需这样做:

    myApp.DisplayAlerts = false;
    myWorkBook.Save();
    myWorkBook.Close(true);
    

    【讨论】:

    • 谢谢!抱歉,我在原始帖子中可能不清楚,我想保存原始文件。所以我们的目标是不保存,因为保存会重新编辑我的原始帖子。
    • 我已经为你更新了我的评论。这应该解释你可以做什么以及不同的选择:)
    【解决方案2】:

    您可以暂时“静默”Excel

    myApp.DisplayAlerts = false;
    myWorkBook.Close(true);
    myApp.DisplayAlerts = true;
    

    那么你应该考虑释放你的 COM 对象

    例子:

    if (obj != null && Marshal.IsComObject(obj))
    {
        Marshal.ReleaseComObject(obj);
    }
    

    【讨论】:

    • 谢谢 - 释放对象会从任务管理器中删除 Excel 吗?
    • myApp.Quit(); 关闭 excel 应用程序,然后如果没有任何问题,它应该不再在任务管理器中可见。有关释放 COM 对象的更多信息,请参见此处:stackoverflow.com/questions/9263481/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2014-05-19
    • 2017-07-25
    • 2011-11-29
    • 2011-08-17
    • 2018-07-22
    相关资源
    最近更新 更多