zoukankan      html  css  js  c++  java
  • 获取已经打开的Excel进程中的文件资源属性

    今天注册了blog,先来一篇简单实用的文章吧~

    以前大家可能碰到过这样的需求,
    要求程序检查.xls文件有没有被Excel打开着,我想很多朋友都会想到利用系统api.获得进程窗体的句柄等...

    前面一段时间,正好碰到了这样需求,所以调查了一下,其实oledb公开了一些api,可供我们使用.

    如代码

    [DllImport("ole32.dll")]
    public static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);

    [DllImport(
    "ole32.dll")]
    public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc);
    private Hashtable GetRunningObjectTable()
    {
        Hashtable result 
    = new Hashtable();

        IntPtr numFetched 
    = IntPtr.Zero;
        IRunningObjectTable runningObjectTable;
        IEnumMoniker monikerEnumerator;
        IMoniker[] monikers 
    = new IMoniker[1];

        GetRunningObjectTable(
    0out runningObjectTable);
        runningObjectTable.EnumRunning(
    out monikerEnumerator);
        monikerEnumerator.Reset();

        
    while (monikerEnumerator.Next(1, monikers, numFetched) == 0)
        
    {
            IBindCtx ctx;
            CreateBindCtx(
    0out ctx);

            
    string runningObjectName;
            monikers[
    0].GetDisplayName(ctx, nullout runningObjectName);

            
    object runningObjectVal;
            runningObjectTable.GetObject(monikers[
    0], out
            runningObjectVal);
            result[runningObjectName] 
    = runningObjectVal;
        }

        
    return result;
    }


    private bool XlsIsOpen(string fileName)
    {
        
    bool XlsIsOpen = false;
        Hashtable rot 
    = GetRunningObjectTable();

        
    bool isOk = false;
        
    foreach (object o in rot.Values)
        
    {
            
    if (isOk)
            
    {
                
    break;
            }

            Excel.Application a 
    = o as Excel.Application;
            
    if (a != null)
            
    {
                Excel.Workbooks wbooks 
    = a.Workbooks;
                
    foreach (Excel.Workbook wb in wbooks)
                
    {
                    
    if (wb.Name == fileName)
                    
    {
                        XlsIsOpen 
    = true;
                        isOk 
    = true;
                        
    break;
                    }

                }

                
    //a.DisplayAlerts = false;
                
    //a.Quit();
            }

        }

        
    return XlsIsOpen;

    }


  • 相关阅读:
    线段树
    5709 01背包
    JavaEE Tutorials (19)
    洛谷 P3385 【模板】负环
    洛谷 P3388 【模板】割点(割顶)
    洛谷 P3387 【模板】缩点
    洛谷 P3386 【模板】二分图匹配
    洛谷 P3371 【模板】单源最短路径
    洛谷 P3370 【模板】字符串哈希
    洛谷 P3366 【模板】最小生成树
  • 原文地址:https://www.cnblogs.com/wangsu/p/1003509.html
Copyright © 2011-2022 走看看