Close excel workbook without killing the excel process or other workbooks - C#











up vote
0
down vote

favorite












I want to be able to end a task called "Microsoft Excel - test.xlsx" without ending any other applications that are also Excel applications.



I have used



foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Equals("EXCEL"))
process.Kill();
}


but this kills all other Excel workbooks that are open. Is it possible to only kill or end the specified workbook?










share|improve this question




















  • 1




    Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
    – Damien_The_Unbeliever
    Nov 22 at 9:30










  • I did suspect as much, is there a way to end the application in C#?
    – javacoder123
    Nov 22 at 9:34










  • @javacoder123 refer this answer
    – J Sushil
    Nov 22 at 9:58












  • Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
    – Sani Singh Huttunen
    Nov 22 at 10:15










  • That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
    – javacoder123
    Nov 22 at 10:16















up vote
0
down vote

favorite












I want to be able to end a task called "Microsoft Excel - test.xlsx" without ending any other applications that are also Excel applications.



I have used



foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Equals("EXCEL"))
process.Kill();
}


but this kills all other Excel workbooks that are open. Is it possible to only kill or end the specified workbook?










share|improve this question




















  • 1




    Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
    – Damien_The_Unbeliever
    Nov 22 at 9:30










  • I did suspect as much, is there a way to end the application in C#?
    – javacoder123
    Nov 22 at 9:34










  • @javacoder123 refer this answer
    – J Sushil
    Nov 22 at 9:58












  • Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
    – Sani Singh Huttunen
    Nov 22 at 10:15










  • That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
    – javacoder123
    Nov 22 at 10:16













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I want to be able to end a task called "Microsoft Excel - test.xlsx" without ending any other applications that are also Excel applications.



I have used



foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Equals("EXCEL"))
process.Kill();
}


but this kills all other Excel workbooks that are open. Is it possible to only kill or end the specified workbook?










share|improve this question















I want to be able to end a task called "Microsoft Excel - test.xlsx" without ending any other applications that are also Excel applications.



I have used



foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Equals("EXCEL"))
process.Kill();
}


but this kills all other Excel workbooks that are open. Is it possible to only kill or end the specified workbook?







c# excel process






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 at 15:19

























asked Nov 22 at 9:28









javacoder123

7310




7310








  • 1




    Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
    – Damien_The_Unbeliever
    Nov 22 at 9:30










  • I did suspect as much, is there a way to end the application in C#?
    – javacoder123
    Nov 22 at 9:34










  • @javacoder123 refer this answer
    – J Sushil
    Nov 22 at 9:58












  • Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
    – Sani Singh Huttunen
    Nov 22 at 10:15










  • That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
    – javacoder123
    Nov 22 at 10:16














  • 1




    Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
    – Damien_The_Unbeliever
    Nov 22 at 9:30










  • I did suspect as much, is there a way to end the application in C#?
    – javacoder123
    Nov 22 at 9:34










  • @javacoder123 refer this answer
    – J Sushil
    Nov 22 at 9:58












  • Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
    – Sani Singh Huttunen
    Nov 22 at 10:15










  • That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
    – javacoder123
    Nov 22 at 10:16








1




1




Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
– Damien_The_Unbeliever
Nov 22 at 9:30




Yes, Excel runs multiple top-level windows from a single process. If you want to close a particular spreadsheet, you don't do it by killing the process.
– Damien_The_Unbeliever
Nov 22 at 9:30












I did suspect as much, is there a way to end the application in C#?
– javacoder123
Nov 22 at 9:34




I did suspect as much, is there a way to end the application in C#?
– javacoder123
Nov 22 at 9:34












@javacoder123 refer this answer
– J Sushil
Nov 22 at 9:58






@javacoder123 refer this answer
– J Sushil
Nov 22 at 9:58














Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
– Sani Singh Huttunen
Nov 22 at 10:15




Possible duplicate of C# - Kill EXCEL.exe process referencing a particular file
– Sani Singh Huttunen
Nov 22 at 10:15












That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
– javacoder123
Nov 22 at 10:16




That is still kill the process not ending the individual task. By using the accepted solution it kills the process. There is only one process for excel in the task manager and multiple workbooks open. I want to stop the application not the entire process.
– javacoder123
Nov 22 at 10:16












1 Answer
1






active

oldest

votes

















up vote
1
down vote













My solution finds the workbook and then closes it.



/// <summary>
/// Gets the current Excel process and specified workbook and closes it.
/// If the workbook was the only one in the application, it then closes excel as well.
/// </summary>
public static void CloseWorkbook()
{
try
{
Application excelApplicationProcess = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); // get current excel process

foreach (object wb in excelApplicationProcess.Workbooks)
{
if (((Workbook)wb).FullName.Equals(Settings.Default.Test))
((Workbook)wb).Close(false, Settings.Default.Test, Missing.Value);
}

if (excelApplicationProcess.Workbooks.Count == 0) // if it was the only one close excel as well
excelApplicationProcess.Quit();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53427675%2fclose-excel-workbook-without-killing-the-excel-process-or-other-workbooks-c-sh%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote













    My solution finds the workbook and then closes it.



    /// <summary>
    /// Gets the current Excel process and specified workbook and closes it.
    /// If the workbook was the only one in the application, it then closes excel as well.
    /// </summary>
    public static void CloseWorkbook()
    {
    try
    {
    Application excelApplicationProcess = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); // get current excel process

    foreach (object wb in excelApplicationProcess.Workbooks)
    {
    if (((Workbook)wb).FullName.Equals(Settings.Default.Test))
    ((Workbook)wb).Close(false, Settings.Default.Test, Missing.Value);
    }

    if (excelApplicationProcess.Workbooks.Count == 0) // if it was the only one close excel as well
    excelApplicationProcess.Quit();
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.Message);
    }
    }





    share|improve this answer

























      up vote
      1
      down vote













      My solution finds the workbook and then closes it.



      /// <summary>
      /// Gets the current Excel process and specified workbook and closes it.
      /// If the workbook was the only one in the application, it then closes excel as well.
      /// </summary>
      public static void CloseWorkbook()
      {
      try
      {
      Application excelApplicationProcess = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); // get current excel process

      foreach (object wb in excelApplicationProcess.Workbooks)
      {
      if (((Workbook)wb).FullName.Equals(Settings.Default.Test))
      ((Workbook)wb).Close(false, Settings.Default.Test, Missing.Value);
      }

      if (excelApplicationProcess.Workbooks.Count == 0) // if it was the only one close excel as well
      excelApplicationProcess.Quit();
      }
      catch (Exception ex)
      {
      Console.WriteLine(ex.Message);
      }
      }





      share|improve this answer























        up vote
        1
        down vote










        up vote
        1
        down vote









        My solution finds the workbook and then closes it.



        /// <summary>
        /// Gets the current Excel process and specified workbook and closes it.
        /// If the workbook was the only one in the application, it then closes excel as well.
        /// </summary>
        public static void CloseWorkbook()
        {
        try
        {
        Application excelApplicationProcess = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); // get current excel process

        foreach (object wb in excelApplicationProcess.Workbooks)
        {
        if (((Workbook)wb).FullName.Equals(Settings.Default.Test))
        ((Workbook)wb).Close(false, Settings.Default.Test, Missing.Value);
        }

        if (excelApplicationProcess.Workbooks.Count == 0) // if it was the only one close excel as well
        excelApplicationProcess.Quit();
        }
        catch (Exception ex)
        {
        Console.WriteLine(ex.Message);
        }
        }





        share|improve this answer












        My solution finds the workbook and then closes it.



        /// <summary>
        /// Gets the current Excel process and specified workbook and closes it.
        /// If the workbook was the only one in the application, it then closes excel as well.
        /// </summary>
        public static void CloseWorkbook()
        {
        try
        {
        Application excelApplicationProcess = (Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); // get current excel process

        foreach (object wb in excelApplicationProcess.Workbooks)
        {
        if (((Workbook)wb).FullName.Equals(Settings.Default.Test))
        ((Workbook)wb).Close(false, Settings.Default.Test, Missing.Value);
        }

        if (excelApplicationProcess.Workbooks.Count == 0) // if it was the only one close excel as well
        excelApplicationProcess.Quit();
        }
        catch (Exception ex)
        {
        Console.WriteLine(ex.Message);
        }
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 22 at 15:07









        javacoder123

        7310




        7310






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53427675%2fclose-excel-workbook-without-killing-the-excel-process-or-other-workbooks-c-sh%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            What visual should I use to simply compare current year value vs last year in Power BI desktop

            How to ignore python UserWarning in pytest?

            Alexandru Averescu