C#(Winform)调用Excel中VBA宏

C#(Winform)调用Excel中VBA宏

简介

最近做一个项目,因为数据分析部分使用VBA简单一些,但是又需要在界面中呈现出来,所以用VBA.C#,SQL相结合的方式完成了本次项目,下面简单的讲讲界面如何操作VBA宏吧

代码区

///
/// 执行Excel中的宏
///
/// Excel文件路径
/// 宏名称()
/// 宏参数组
/// 宏返回值
/// 执行时是否显示Excel
public void RunExcelMacroTest(string excelFilePath, string macroName, object[] parameters, out object rtnValue, bool isShowExcel)
{
try
{
#region 检查入参
// 检查文件是否存在
if (!File.Exists(excelFilePath))
{
throw new System.Exception(excelFilePath + " 文件不存在");
}
// 检查是否输入宏名称
if (string.IsNullOrEmpty(macroName))
{
throw new System.Exception(“请输入宏的名称”);
}
#endregion
#region 调用宏处理
// 准备打开Excel文件时的缺省参数对象
object oMissing = System.Reflection.Missing.Value;
// 根据参数组是否为空,准备参数组对象
object[] paraObjects;
if (parameters == null)
{
paraObjects = new object[] { macroName };
}
else
{
// 宏参数组长度
int paraLength = parameters.Length;
paraObjects = new object[paraLength + 1];

                paraObjects[0] = macroName;
                for (int i = 0; i < paraLength; i++)
                {
                    paraObjects[i + 1] = parameters[i];
                }
            }
            // 创建Excel对象示例
            Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
            // 判断是否要求执行时Excel可见
            if (isShowExcel)
            {
                // 使创建的对象可见
                oExcel.Visible = true;
            }
            else
            {
                oExcel.Visible = false;
            }
            // 创建Workbooks对象
            Excel.Workbooks oBooks = oExcel.Workbooks;
            // 创建Workbook对象
            Excel._Workbook oBook = null;
            // 打开指定的Excel文件
            oBook = oBooks.Open(
                                    excelFilePath,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing,
                                    oMissing

);
// 执行Excel中的宏
rtnValue = this.RunMacro(oExcel, paraObjects);
// 保存更改
oBook.Save();
// 退出Workbook
//oBook.Close(false, oMissing, oMissing);
#endregion
#region 释放对象
// 释放Workbook对象
//System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
//oBook = null;
释放Workbooks对象
//System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
//oBooks = null;
关闭Excel
oExcel.Quit();
释放Excel对象
//System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
//oExcel = null;
调用垃圾回收
//GC.Collect();
#endregion
}
catch (Exception ex)
{
throw ex;
}
}

private void btn_RefshAll_Click(object sender, EventArgs e)
{

        object objRtn = new object();//需要两次
        RunExcelMacro(txt_DataAdress.Text, "透视刷新", new object[] { }, out objRtn, true);
        Thread.Sleep(2000);
        RunExcelMacro(txt_DataAdress.Text, "透视刷新", new object[] { }, out objRtn, true);
        Thread.Sleep(2000);
        RunExcelMacroTest(txt_WordList.Text, "全部刷新1", new object[] { }, out objRtn, true);
        MessageBox.Show("透视表刷新成功");
    }

其中宏的参数名称可以为空。亲测成功,但是刷新数据速度有点慢,后优化到直接用使用界面操作EXCEL进行分析。有许多不足之处希望各位大佬指出。
有疑问联系我 QQ:229207486

  • 2
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

DD日常

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值