用process获取系统进程只能获取文件名,process获得的文件路径只是Excel.exe的路径,而不是文件路径。

解决方案 »

  1.   

    不知道你是不是想这么干,把这段代码放到一个btn里面调试下
                string StrPath = "";
                OpenFileDialog ofdlg = new OpenFileDialog();
                //ofdlg.Filter = "Excel(*.xls)|*.xls";
                ofdlg.Filter = "Excel工作表(*.xls;*.et)|*.xls;*.et";
                ofdlg.Multiselect = false;
                if (ofdlg.ShowDialog() == DialogResult.OK)
                {
                    StrPath = ofdlg.FileName;
                    if (StrPath.Substring(StrPath.Length - 3) == "xls")
                    {
                        MessageBox.Show("OFFICE文件");
                    }                if (StrPath.Substring(StrPath.Length - 2) == "et")
                    {
                        MessageBox.Show("WPS文件");
                    }
    }
      

  2.   


    谢谢你的回答,但是我不是通过程序打开excl的...
      

  3.   

    有相关的API,但是,试过就是不成功...
      

  4.   

    难道你认为取到的应该是文档路径吗?你应该知道Process.Start(appPath, arguments)吧
    如果让你用Excel.exe路径打开指定的文档,你会怎么传参呢?
    如果Excel仅打开那一个文档
    可以通过win32 APIGetStartInfo查询到启动参数
    或者使用WMI
    using System;
    using System.Management;class Program
    {
        static void Main()
        {
            SelectQuery selectQuery = new SelectQuery("select * from Win32_Process");
            object cmdLine = string.Empty;        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery))
            {
                foreach (ManagementObject process in searcher.Get())
                {
                    cmdLine = process.Properties["CommandLine"].Value;
                    Console.WriteLine(cmdLine == null ? "-----" : cmdLine);
                }
            }        Console.ReadKey();
        }
    }但是Excel进程可以同时打开多个文档,要准确取得你要的那个,有三种途径
    1.Net通过COM交互(注意Excel组件版本)
    2.直接引用Microsoft.Office.Interop.Excel.dll来实现(强类型)
    3.MS提供的VBA或者宏 activewordbook.fullname
      

  5.   

    "select * from Win32_Process where ProcessId" +  进程Id