zoukankan      html  css  js  c++  java
  • 判断机器是否有安装excel

    //判断机器是否有安装excel
     Type type = Type.GetTypeFromProgID("Excel.Application");

    今天改bug的时候,突然有个要求需要判断机器是否有安装excel,如果没有安装,用dev控件导出excel会出错.俺就在网上狂搜了,结果搜到这句最简便,还有可以使用检查注册表的方式.

    注册表方式:

    代码
      using System;
    using System.Collections.Generic;
    using System.Text;

    namespace WpsTest
    {
        
    public class OfficeOperator
        {
            
    #region 方法

            
    #region public static
            
    /// <summary>
            
    /// 检测MS-Office是否正确安装
            
    /// 通过注册表检测
            
    /// </summary>
            
    /// <param name="version">获得安装的版本号,如office2000,office2003,office2007</param>
            
    /// <returns></returns>
            public static bool IsInstall(out string Version)
            {
                
    bool result = false;
                
    string officePath = "";
                
    string officeVersion = "";
                
                Version 
    = "";
                GetOfficePath(
    out officePath, out officeVersion);

                
    if (!string.IsNullOrEmpty(officeVersion) && !string.IsNullOrEmpty(officePath))
                {
                    result 
    = true;
                    Version 
    = officeVersion;
                }

                
    return result;
            }

            
    /// <summary>
            
    /// 获取当前某个版本Office的安装路径
            
    /// </summary>
            
    /// <param name="Path">返回当前系统Office安装路径</param>
            
    /// <param name="Version">返回当前系统Office版本信息</param>
            public static void GetOfficePath(out string Path,out string Version)
            {
                
    string strPathResult = "";
                
    string strVersionResult = "";
                
    string strKeyName = "Path";
                
    object objResult = null;
                Microsoft.Win32.RegistryValueKind regValueKind;
                Microsoft.Win32.RegistryKey regKey 
    = null;
                Microsoft.Win32.RegistryKey regSubKey 
    = null;

                
    try
                {
                    regKey 
    = Microsoft.Win32.Registry.LocalMachine;

                    
    if (regSubKey == null)
                    {
    //office97
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\8.0\Common\InstallRoot"false);
                        strVersionResult 
    = "office97";
                        strKeyName 
    = "OfficeBin";
                    }

                    
    if (regSubKey == null)
                    {
    //Office2000
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\9.0\Common\InstallRoot"false);
                        strVersionResult 
    = "office2000";
                        strKeyName 
    = "Path";
                    }

                    
    if (regSubKey == null)
                    {
    //officeXp
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot"false);
                        strVersionResult 
    = "officeXP";
                        strKeyName 
    = "Path";
                    }

                    
    if (regSubKey == null)
                    {
    //Office2003
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Common\InstallRoot"false);
                        strVersionResult 
    = "office2003";
                        strKeyName 
    = "Path";
                    }

                    
    if (regSubKey == null)
                    {
    //office2007 
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Common\InstallRoot"false);
                        strVersionResult 
    = "office2007";
                        strKeyName 
    = "Path";
                    }

                    objResult 
    = regSubKey.GetValue(strKeyName);
                    regValueKind 
    = regSubKey.GetValueKind(strKeyName);
                    
    if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
                    {
                        strPathResult 
    = objResult.ToString();
                    }
                }
                
    catch (System.Security.SecurityException ex)
                {
                    
    throw new System.Security.SecurityException("您没有读取注册表的权限", ex);
                }
                
    catch (Exception ex)
                {
                    
    throw new Exception("读取注册表出错!", ex);
                }
                
    finally
                {

                    
    if (regKey != null)
                    {
                        regKey.Close();
                        regKey 
    = null;
                    }

                    
    if (regSubKey != null)
                    {
                        regSubKey.Close();
                        regSubKey 
    = null;
                    }
                }

                Path 
    = strPathResult;
                Version 
    = strVersionResult;
            }
            
    #endregion public static

            
    #endregion 方法
        }
    }
      
    //使用方法
      private void btnGetOfficePath_Click(object sender, EventArgs e)
            {
                
    string officePath = "";
                
    string officeVersion = "";
                
    try
                {
                    OfficeOperator.GetOfficePath(
    out officePath,out officeVersion);
                }
                
    catch (Exception ex)
                {
                    MessageBox.Show(
    "无法获取系统Office信息");
                }
                
    if (!string.IsNullOrEmpty(officePath) && !string.IsNullOrEmpty(officeVersion))
                {
                    MessageBox.Show(
    string.Format("版本:{0}\r\n安装路径:{1}",officeVersion,officePath));
                }
            }

            
    //是否安装及版本
            private void btnIsInstall_Click(object sender, EventArgs e)
            {
                
    try
                {
                    
    string version = "";
                    
    if (OfficeOperator.IsInstall(out version))
                    {
                        MessageBox.Show(
    string.Format("当前安装了{0}", version));
                    }
                    
    else
                    {
                        MessageBox.Show(
    "您当前还没有安装微软Office系列软件");
                    }
                }
                
    catch(Exception ex)
                {
                    MessageBox.Show(
    "无法获取系统Office信息");
                }
            }
    版权说明

      如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
      作      者:温景良
      文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/wenjl520/p/1769372.html
Copyright © 2011-2022 走看看