使用 Microsoft.Office.Interop.Excel.dll 更新Excel的ColumnName

Microsoft.Office.Interop.Excel.dll 是MS提供的用于操作Excel的类库,这个类库非常强大,笔者最近遇到一个项目,需要修改Excel的列名,并且做成SSIS Package,在ssms中生存job自动执行。之前考虑使用NPOI,但是在使用NPOI时,Script task不能将NPOI自动导入到.net framework,需要执行一个gacutil的脚本,有点麻烦,既然Microsoft.Office.Interop.Excel.dll是微软的东西,肯定是已经集成到.net framework中,使用起来比较方便。

示例代码如下,代码中有关闭Excel和Kill Excel的进程是从网上复制的,向前辈致敬。

using Excel = Microsoft.Office.Interop.Excel;

        public void UpdateExcelColumnNameSimplify()
        {
            string strPath = @"C:\ExcelFile\FY15 R-Code Master - Copy.xlsx";
            Excel.Application excelApp=null;
            Excel.Workbook xlsWorkBook=null;

            try
            {
                System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

                excelApp = new Excel.Application();
                excelApp.DisplayAlerts = false;
                excelApp.Visible = false;
                excelApp.ScreenUpdating = false;

                xlsWorkBook = excelApp.Workbooks.Open(strPath, System.Type.Missing, System.Type.Missing, System.Type.Missing,
                    System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing,
                    System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);

                Excel.Worksheet xlsWorkSheet = (Excel.Worksheet)xlsWorkBook.Worksheets["sheet1"];

                int colsCount = 10;
                for (int i = 1; i < colsCount; i++)
                {
                    Excel.Range rc = (Excel.Range)xlsWorkSheet.Cells[1, i];
                    if (rc.Value != null)
                    {
                        rc.Value = rc.Value.ToString().Trim();
                    }
                }

                xlsWorkSheet = (Excel.Worksheet)xlsWorkBook.Worksheets["sheet2"];
                for (int i = 1; i < colsCount; i++)
                {
                    Excel.Range rc = (Excel.Range)xlsWorkSheet.Cells[1, i];
                    if (rc.Value != null)
                    {
                        rc.Value = rc.Value.ToString().Trim();
                    }
                }

                xlsWorkBook.Save();
            }
            catch
            {
                throw;
            }
            finally
            {
                CloseExcel(excelApp, xlsWorkBook);
            }
        }

        public class KillMyExcelProcess
        {
            [DllImport("User32.dll", CharSet = CharSet.Auto)]

            public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

            public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
            {
                try
                {
                    IntPtr t = new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口 

                    int k = 0;

                    GetWindowThreadProcessId(t, out k);   //得到本进程唯一标志k

                    System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用

                    p.Kill();     //关闭进程k
                }
                catch (System.Exception ex)
                {

                    throw ex;
                }
            }
        }

        public void CloseExcel(Microsoft.Office.Interop.Excel.Application ExcelApplication, Microsoft.Office.Interop.Excel.Workbook ExcelWorkbook)
        {
            ExcelWorkbook.Close(false, Type.Missing, Type.Missing);

            ExcelWorkbook = null;

            ExcelApplication.Quit();

            GC.Collect();

            KillMyExcelProcess.Kill(ExcelApplication);
        }
时间: 2024-10-11 21:58:49

使用 Microsoft.Office.Interop.Excel.dll 更新Excel的ColumnName的相关文章

window2008 64位系统无法调用Microsoft.Office.Interop组件进行文件另存的解决办法

服务器是windows server2008 64位系统,项目中需要用到Microsoft.Office.Interop组件,包括excel.word.ppt等. 重点一: 步骤 1.在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 2.依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 3.在"

VS编程中找不到Microsoft.Office.Core、Microsoft.Office.Interop.Word和VBIDE

在使用vs2005. vs2008. vs2010 制作包含 word等office的应用程序时,有时找不到对Microsoft.Office.Core. Microsoft.Office.Interop.Word和VBIDE 三个文件的引用,此时,如果已经安装了office 2003,那么可能是选择“典型安装”或者是“最小化安装”,那需要从“控制面板”中将其删除,然后再次安装,并选择“完全安装”,安装之后再使用以下两 种方法之一即可. 在选择“完全安装”office 2003 后,使用以下两种

c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 [csharp] view plaincopy using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; 3.写入excel 写入函数 [csharp] view plaincopy public void ToExcel(string strTitle) { int nMax = 9; int nMin =

Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库

1. Interop.Excel.dll 的查找 本文中将 Microsoft.Office.Interop.Excel.dll库简称为Interop.Excel.dll库 其实在使用Visual Studio进行Office的Excel开发时,Microsoft.Office.Interop.Excel.dll 可以在类似于下面的目录中找到.并不需要再在网上下载了. E:\Program Files\Microsoft Visual Studio 11.0\Visual Studio Tool

Excel操作 Microsoft.Office.Interop.Excel.dll的使用

先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Excel操作,接触Excel后发现他的api说明并不多,好在网上有很多朋友贴出了一些代码,我在不断的挫折中吸取了很多教训,现共享出来,给大家参考. 1. 最好在客户端使用,不要在B/S服务端使用,因为会受到IIS权限和占用内存影响,多人并发操作必然完蛋 2. 需要引入两个DLL,Microsoft.Office.Interop.Excel.dll和office.dll,在加上项目的时候,会报错“类型“Microsoft.Off

vs引用Microsoft.Office.Interop.Excel.dll版本问题

错误信息: {"检索 COM 类工厂中 CLSID 为 {00020819-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))."} 开始以为权限问题: dcomcnfg.exe 安全--启动与激活权限 访问权限自定义: 问题并没解决: excle组件问题大多都是权限和版本问题, 错误原因:引用Microsoft.Offi

NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF

首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll 下载链接,下载以后解压文件,把Microsoft.Office.Interop.excel.dll拷贝到项目下,添加引用.NPOI的添加则项目选中右键使用管理NuGet管理程序包,nuget添加NPOI即可) 上述工作完成,下面直接代码 using System;using System.Collections.Generic;u

Assembly &#39;Microsoft.Office.Interop.Excel

编译的时候报错,都无法通过编译: Assembly 'Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' uses 'Microsoft.Vbe.Interop, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' which has a higher version

引用Microsoft.Office.Interop.Excel出现的问题

引用Microsoft.Office.Interop.Excel出现的问题 转自:http://www.hccar.com/Content,2008,6,11,75.aspx,作者:方继祥 操作背景:asp.net操作Excel 出现问题:在本地添加引用(com):Microsoft Office 11.0 Object Library,并写好程序调试正常,部署到服务器时,出现异常 Excel.Application不是对象. 初步诊断:服务器没有安装Excel组件 第一步尝试解决:对服务器安装