对Excel插件的开发,目的是在工具栏中添加一个外部程序,点击这个外部程序,可以将当前的Sheet数据获取到并保存到另外一个sheet里面;主要注意两方面:
一、Excel插件外部程序建立向导,具体步骤是:
1. | 在 Microsoft Visual Studio .NET的文件菜单上,单击新建,然后单击项目。 | ||||||||||||||||||||
2. | 在新建项目对话框中,展开项目类型下的其他项目,选择扩展性项目,然后选择共享的外接程序模板。 | ||||||||||||||||||||
3. | 键入 MyCOMAddin作为该外接程序的名称,然后单击确定。 | ||||||||||||||||||||
4. | “扩展性向导”出现后,请按照下列步骤操作:
|
||||||||||||||||||||
5. | 在项目菜单上,单击添加引用。单击组件列表中的System.Windows.Forms.DLL,单击选择,然后单击确定。 引用要操作office对象,比如要操作excel,引用了Microsoft.Office.Interop.Excel,可以在微软的站点查找oxppia.exe文件下载,具体地址:http://download.microsoft.com/download/c/4/8/c4813cc0-a4d4-4bb4-b486-9cbd56f38235/oxppia.exe |
Excel插件开发指导说明可以参考微软的网址:
http://support.microsoft.com/?kbid=302901
二、具体C#对Excel的操作:
1、如何获取到当前Excel、workbook、worksheet等:
object o =System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel._Application app = o asExcel._Application; Excel.Workbook workBook =app.ActiveWorkbook;//得到当前活动的excel文档
Excel._Workbook wr = app.ActiveWorkbook;
if (workBook == null)
{
MessageBox.Show("No workbook is currently defined");
}
Excel.Worksheet xlsSheet;
xlsSheet =(Excel.Worksheet)workBook.ActiveSheet;//得到当前Sheet
m_iJ = xlsSheet.UsedRange.Rows.Count;//得到当前Sheet行数
2、各个属性值:
newWorksheet =(Excel.Worksheet)workBook.Worksheets.Add(Type.Missing,Type.Missing, Type.Missing,Type.Missing);//新增一个Sheet
newWorksheet.Name ="导入MQC";//设置Sheet的名称
newWorksheet.get_Range("A1", Missing.Value).Value2 ="Path";//设置某个单元格的值
newWorksheet.Cells.Clear();//清除单元格里面的值
newWorksheet.Cells.Font.Size = "10";//设置单元格字体大小
问题1 Visual Studio 2005开发的Office插件无法在Office中运行
这个问题可能是由于没有安装KB908002中提到的prerequisite造成的,可以去下面的地址下载该文档中提到的补丁:http://support.microsoft.com/kb/908002
安装完成后,我们可以在Add-in的安装项目的prerequisites中找到一个新的组件。
问题2 如何制作兼容多个版本Office的Office Addin
通常情况下,我们编写的Add-in都是直接用向导生成的,且使用的是早期绑定技术(earlybinding)。但在许多需求中,我们需要制作一个能够兼容多个Office版本的Add-in,这时我们就不能使用早期绑定了,而应该使用后期绑定(latebinding)。关于早期绑定和后期绑定的详细信息,请见http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
问题3 通常Addin设置保存在注册表的什么位置
以Office 2003 WordAdd-in为例,通常会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins中。
假设我们有一个名字为MyAddin1的Addin,那么它就会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins\MyAddin1.Connect中。
对于ExcelAdd-in来说,也是类似的,通常保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins中,依此类推。
对Excel插件的开发,目的是在工具栏中添加一个外部程序,点击这个外部程序,可以将当前的Sheet数据获取到并保存到另外一个sheet里面;主要注意两方面:
一、Excel插件外部程序建立向导,具体步骤是:
1. | 在 Microsoft Visual Studio .NET的文件菜单上,单击新建,然后单击项目。 | ||||||||||||||||||||
2. | 在新建项目对话框中,展开项目类型下的其他项目,选择扩展性项目,然后选择共享的外接程序模板。 | ||||||||||||||||||||
3. | 键入 MyCOMAddin作为该外接程序的名称,然后单击确定。 | ||||||||||||||||||||
4. | “扩展性向导”出现后,请按照下列步骤操作:
|
||||||||||||||||||||
5. | 在项目菜单上,单击添加引用。单击组件列表中的System.Windows.Forms.DLL,单击选择,然后单击确定。 引用要操作office对象,比如要操作excel,引用了Microsoft.Office.Interop.Excel,可以在微软的站点查找oxppia.exe文件下载,具体地址:http://download.microsoft.com/download/c/4/8/c4813cc0-a4d4-4bb4-b486-9cbd56f38235/oxppia.exe |
Excel插件开发指导说明可以参考微软的网址:
http://support.microsoft.com/?kbid=302901
二、具体C#对Excel的操作:
1、如何获取到当前Excel、workbook、worksheet等:
object o =System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
Excel._Application app = o asExcel._Application; Excel.Workbook workBook =app.ActiveWorkbook;//得到当前活动的excel文档
Excel._Workbook wr = app.ActiveWorkbook;
if (workBook == null)
{
MessageBox.Show("No workbook is currently defined");
}
Excel.Worksheet xlsSheet;
xlsSheet =(Excel.Worksheet)workBook.ActiveSheet;//得到当前Sheet
m_iJ = xlsSheet.UsedRange.Rows.Count;//得到当前Sheet行数
2、各个属性值:
newWorksheet =(Excel.Worksheet)workBook.Worksheets.Add(Type.Missing,Type.Missing, Type.Missing,Type.Missing);//新增一个Sheet
newWorksheet.Name ="导入MQC";//设置Sheet的名称
newWorksheet.get_Range("A1", Missing.Value).Value2 ="Path";//设置某个单元格的值
newWorksheet.Cells.Clear();//清除单元格里面的值
newWorksheet.Cells.Font.Size = "10";//设置单元格字体大小
问题1 Visual Studio 2005开发的Office插件无法在Office中运行
这个问题可能是由于没有安装KB908002中提到的prerequisite造成的,可以去下面的地址下载该文档中提到的补丁:http://support.microsoft.com/kb/908002
安装完成后,我们可以在Add-in的安装项目的prerequisites中找到一个新的组件。
问题2 如何制作兼容多个版本Office的Office Addin
通常情况下,我们编写的Add-in都是直接用向导生成的,且使用的是早期绑定技术(earlybinding)。但在许多需求中,我们需要制作一个能够兼容多个Office版本的Add-in,这时我们就不能使用早期绑定了,而应该使用后期绑定(latebinding)。关于早期绑定和后期绑定的详细信息,请见http://word.mvps.org/FAQs/InterDev/EarlyvsLateBinding.htm
问题3 通常Addin设置保存在注册表的什么位置
以Office 2003 WordAdd-in为例,通常会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins中。
假设我们有一个名字为MyAddin1的Addin,那么它就会保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins\MyAddin1.Connect中。
对于ExcelAdd-in来说,也是类似的,通常保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins中,依此类推。
在每个Add-in的设置属性中有一个重要的标志LoadBehavior,这个属性是保存在XXXX.Connect中的,类型为DWORD,这个值直接决定了Addin的启动模式,默认值为3表示Office应用程序一启动就运行,这个设置与我们在Addin向导中选择的"Iwould like my Add-in to load when the host applicationloads"是对应的。
问题4当确定你的Add-in应该可以正确加载,但在启动时没有加载,这是怎么回事
如果一个Add-in因为某些原因在启动时加载失败,Office应用程序会自动把LoadBehavior改成8,这表示仅在需要加载时才加载该Add-in,而不是在Office启动时。所以这时可以到与该Add-in对应的注册表项中检查一下LoadBehavior值是否正确,如果为8,一定把它改成3。
在每个Add-in的设置属性中有一个重要的标志LoadBehavior,这个属性是保存在XXXX.Connect中的,类型为DWORD,这个值直接决定了Addin的启动模式,默认值为3表示Office应用程序一启动就运行,这个设置与我们在Addin向导中选择的"Iwould like my Add-in to load when the host applicationloads"是对应的。