在VSTO平台使用C#里的Button控件 怎样实现在Excel里导入Excel/Word文档模板,是导入不是打开。thks解答!如下图
首先,需要在VSTO项目中添加一个按钮控件,代码如下:
using System.Windows.Forms;
// 在ThisAddIn.cs中的ThisAddIn_Startup方法中添加以下代码
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// 在Ribbon中添加按钮
MyRibbon ribbon = Globals.Ribbons.GetRibbon<MyRibbon>();
ribbon.button1.Click += Button1_Click;
}
// Button1的点击事件
private void Button1_Click(object sender, RibbonControlEventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Excel文件 (*.xlsx)|*.xlsx|Word文件 (*.docx)|*.docx";
dialog.Multiselect = false;
dialog.ShowDialog();
if (dialog.FileName.EndsWith(".xlsx")) {
// 导入Excel模板
ImportExcelTemplate(dialog.FileName);
} else if (dialog.FileName.EndsWith(".docx")) {
// 导入Word模板
ImportWordTemplate(dialog.FileName);
}
}
// 导入Excel模板的方法
private void ImportExcelTemplate(string fileName)
{
Excel.Workbook workbook = Globals.ThisAddIn.Application.ActiveWorkbook; // 获取当前活动的工作簿
Excel.Worksheet worksheet = workbook.ActiveSheet; // 获取当前活动的工作表
// 打开Excel模板文件
Excel.Workbook templateWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(fileName);
// 复制Excel模板的内容到当前工作表
Excel.Worksheet templateWorksheet = templateWorkbook.ActiveSheet;
templateWorksheet.Cells.Copy();
worksheet.Cells.PasteSpecial();
// 关闭Excel模板文件
templateWorkbook.Close(false);
}
// 导入Word模板的方法
private void ImportWordTemplate(string fileName)
{
// 打开Word模板文件
Word.Application wordApplication = new Word.Application();
Word.Document document = wordApplication.Documents.Open(fileName);
// 复制Word模板的内容到当前工作表
document.Content.Copy();
Globals.ThisAddIn.Application.ActiveSheet.Paste();
// 关闭Word模板文件
document.Close(false);
wordApplication.Quit();
}
然后,需要在Ribbon.xml文件中添加按钮控件,代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="tab1" label="Tab1">
<group id="group1" label="Group1">
<button id="button1" label="导入模板" size="large" imageMso="PictureInsertFromFile" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
最后,在解决方案资源管理器中,选择Ribbon,并右键单击,选择“添加新项”,并选择“Ribbon”,该名称为"MyRibbon",然后代码如下:
using Microsoft.Office.Tools.Ribbon;
public partial class MyRibbon : RibbonBase
{
public MyRibbon()
: base(Globals.Factory.GetRibbonFactory())
{
InitializeComponent();
}
private void MyRibbon_Load(object sender, RibbonUIEventArgs e)
{
}
}