C# VSTO學習心得 Day2

上次學習到創建一個EXCEL活頁簿專案,並且開始增加按鈕,這次要對EXCEL的函數來做介紹

還需要using以下兩個模組才能調用函數

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Ribbon;

從上一篇開啟最後可以看到我們新建立的專案有兩個方法已經幫我們建立好了,一個是Ribbon(就是前一篇提到的空白區域),另一個是button(就是我們建立的按鈕),此時我們就可從這兩個區塊去寫入我們要的方法
在这里插入图片描述

RIBBON

先來介紹RIBBON
RIBBON這個方法寫入方法後會在後續打開EXCEL時就先默認載入運行,所以有甚麼操作需要在打開時就要先載入就必須寫在這裡面

寫入

舉個例子,實務上在使用VSTO會搭配SQL,所以有些資料在打開時就會去和SQL連接接資料,這樣就可以要把要給USER選擇的條件在EXCEL載入時也就一併一起載入

載入方法以DROP DOWN來當作範例,要怎麼載入呢?

        public void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {
           
   			//先使用SQL載入資料,以下省略SQL函數,只留下QUERY字串
            string sql_period = @"SELECT A.*  FROM (SELECT  DISTINCT DATA_VERSION FROM DATA_SQL
                                ORDER BY DATA_VERSION DESC
                                )A WHERE ROWNUM <= 9";

			//Period_list是一個裝載20240101、20240201、20240301這樣的日期格式,使用foreach 方法來寫入DROP DOWN裡面
            foreach (string s in Period_list)
            {
            	//常常要控制RIBBON都會使用到 this.Factory這個函數,第一個RibbonDropDownItem
                RibbonDropDownItem item = this.Factory.CreateRibbonDropDownItem();
                //把每個日期賦予到上面的DropDownItem item中
                item.Label = s;
                //dropDown_Period_start是dropDown下拉選單這個物件的Name
                dropDown_Period_start.Items.Add(item);
            }
			//第二個RibbonDropDownItem
            RibbonDropDownItem item2 = this.Factory.CreateRibbonDropDownItem();
            item2.Label = Period_list[0];
            dropDown_Period_end.Items.Add(item2);
			
			//這是自行定義的函數,放在RIBBON中只要dropDown_Period_start這個物件有數值上的變動就會觸發函數,也就是dropDown日期我們在選擇時只要變換就會觸發,算是一種監控機制,放在下面
            dropDown_Period_start.SelectionChanged += dropDown1_SelectionChanged;



        }

監控函數,在選擇日期區間時兩個RibbonDropDownItem會因為選擇DropDown而去限制另一個DropDown可選擇的日期

        //LOAD日期到Dropdown
        private void dropDown1_SelectionChanged(object sender, RibbonControlEventArgs e)
        {
            // 選擇日期
            string selectedDate = dropDown_Period_start.SelectedItem.Label;

            // 選擇INDEX
            int selectedIndex = Period_list.IndexOf(selectedDate);

            dropDown_Period_end.Items.Clear();

            for (int i = 0; i <= selectedIndex; i++)
            {
                RibbonDropDownItem item = this.Factory.CreateRibbonDropDownItem();
                item.Label = Period_list[i];
                dropDown_Period_end.Items.Add(item);
            }


        }

讀取

當然單單只是選擇但是如果不能讀取出來做使用那就沒意義了,讀取方法很簡單,僅僅一行代碼

var date = dropDown_Period_start.SelectedItem.ToString();

RIBBON對應的sheet切換

有時我們EXCEL會有好幾個sheet每一個對應的功能都會不一樣,但是上方RIBBON的按鈕又想只單獨給那個sheet使用而已,這邊就是介紹sheet在切換時可將上面RIBBON部分區域隱藏的方法

首先要先自定義函數這邊取名為UpdateButton3Visibility,假設有3個EXCEL分頁分別是ALL、GAP、Developing,三個分頁分別能看到的BUTTON都是不一樣的,設置可以定義GROUP是否可被看見

按鈕有4個分別是 : btn_Query、button1、alarm、group1(這是一個群組),先寫好函數,看哪個頁面應該能看到哪些按鈕

 private void UpdateButton3Visibility()
        {
            // 取得當前sheet名稱,代表當前正在被使用的工作表
            Worksheet activeWorksheet = (Worksheet)Globals.ThisWorkbook.ActiveSheet;

            // 根據sheet決定可視化,如果切換到ALL頁面
            if (activeWorksheet.Name == "ALL")
            {
            //Visible代表能不能看見,
                btn_Query.Visible = true; 
                button1.Visible = false;
                alarm.Visible = false;
                //這邊甚至可以是一個GROUP能不能看見,而非單一按鈕而已
                group1.Visible = false;
            }
            //如果切換到GAP頁面
            else if (activeWorksheet.Name == "GAP")
            {
                btn_Query.Visible = false;  
                button1.Visible = true;
                alarm.Visible = false;
                group1.Visible = false;
            }
            //如果切換到Developing頁面
            else if (activeWorksheet.Name == "Developing")
            {
                btn_Query.Visible = false;
                button1.Visible = false;
                alarm.Visible = false;
                group1.Visible = true;
            }
            else
            {
                btn_Query.Visible = false;
                button1.Visible = false;
                alarm.Visible = true;
                group1.Visible = false;
            }

        }
        private void ThisWorkbook_SheetActivate(object Sh)
        {
            // 可視化
            UpdateButton3Visibility();
        }

寫好後在RIBBON裡面調用,一開始執行時先運行一次UpdateButton3Visibility
後面切換sheet時使用監控的方法
Globals.ThisWorkbook.SheetActivate += ThisWorkbook_SheetActivate;

        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {

            UpdateButton3Visibility();
            Globals.ThisWorkbook.SheetActivate += ThisWorkbook_SheetActivate;
            
        }

Day2目前就先介紹到這邊,既然讀取出來那就要寫入到EXCEL中了
後續在來紀錄怎麼寫入EXCEL中~

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# VSTO (Visual Studio Tools for Office) 是一种用于开发 Microsoft Office 应用程序的技术框架,其中包括 ExcelVSTO 提供了一组强大的工具和功能,使开发人员能够使用 C# 编程语言来创建自定义的 Excel 解决方案。 通过使用 C# VSTO,您可以利用 Excel 的功能和数据处理能力,以及自定义用户界面和业务逻辑,创建各种类型的 Excel 插件和扩展。以下是一些 C# VSTO 开发 Excel 的常见功能和用途: 1. 自定义功能:您可以使用 C# VSTO 创建自定义函数,以扩展 Excel 的内置函数库。这样,您可以根据特定需求创建自定义计算公式,并在 Excel 中使用它们。 2. 数据操作:C# VSTO 允许您通过编程方式读取、写入和操作 Excel 工作簿中的数据。您可以使用 C# 代码来执行各种数据操作,如读取单元格值、设置单元格格式、创建图表等。 3. 用户界面定制:通过 C# VSTO,您可以创建自定义的 Excel 用户界面,包括自定义的菜单、工具栏、任务窗格等。这样,您可以根据特定需求为用户提供更直观和易用的界面。 4. 事件处理:C# VSTO 允许您订阅 Excel 中的各种事件,如工作簿打开、单元格更改等。通过事件处理,您可以在特定事件发生时执行自定义的操作,以响应用户的操作或特定的工作簿状态。 5. 数据交互:C# VSTO 可以与其他数据源进行交互,如数据库、Web 服务等。您可以使用 C# 代码将 Excel 中的数据与其他系统进行集成和交互,实现数据的导入、导出和同步等功能。 总之,C# VSTO 提供了丰富的功能和灵活性,使开发人员能够以 C# 编程语言创建强大的 Excel 解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值