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;

    }


  • 相关阅读:
    读码的逻辑设计
    简单拼接图像的tile_images和tile_images_offset算子
    select_shape_proto算子的几种特征模式含义解析
    Photoshop中的高斯模糊、高反差保留和Halcon中的rft频域分析研究
    sort_contours_xld算子的几种排序方式研究
    Region在connection前后进行“交并差”等操作的异同
    Halcon中xld的常见特征的含义总结
    Halcon选择一堆region中面积第N大的region的算法实现
    从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同
    Halcon阈值化算子dual_threshold和var_threshold的理解
  • 原文地址:https://www.cnblogs.com/wangsu/p/1003509.html
Copyright © 2011-2022 走看看