C# 加载项 Excel : ActiveSheet

标签 c# excel vsto add-in

对于我的第一个 AddIn Excel,我想选择事件工作表并计算工作表中的列和行。

我在自定义功能区中创建了一个按钮。

    private void AddValues_Click(object sender, RibbonControlEventArgs e)
        {  
            int lastRow;
            int lastColonne;

            lastRow = Globals.VATTools.Application.Selection.Rows.Count;
            lastColonne = Globals.VATTools.Application.Selection.Columns.Count;

            System.Windows.Forms.MessageBox.Show("Row : " + lastRow + " " + "Columns : " + lastColonne); 

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlApp.Visible = true;             
            Microsoft.Office.Interop.Excel.Workbook xlWb = xlApp.ActiveWorkbook as Microsoft.Office.Interop.Excel.Workbook;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;
            Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range("A19"); 
            range.Value = "hello world!";
        }

我的第一个问题:它返回 1 列和 1 行。但在我的工作表中,我有 23 列和 17 行。 为什么这不能在我的工作表中返回正确的列数和行数?

第二个问题:我在 ActiveSheet 上遇到异常:

Microsoft.Office.Interop.Excel.Worksheet xlSheet = xlWb.ActiveSheet;

错误:System.NullReferenceException:“未将对象引用设置为对象的实例。”

我不明白为什么会出现此错误。

谢谢!

最佳答案

第一个问题:

您需要使用工作表对象中的UsedRange 属性。 该选择只会为您提供有关所选单元格当前部分的信息。

Microsoft.Office.Interop.Excel.Range usedRange = xlSheet.UsedRange;
//To get the number of rows/columns
int totalRows = usedRange.Rows.Count;
int totalColumns = usedRange.Columns.Count;

第二个问题:

由于您正在编写插件程序,因此不需要创建新的 excelApp。 以下代码将使您能够访问您的文档

Microsoft.Office.Interop.Excel.Workbook xlWb = Globals.ThisAddin.Application.ActiveDocument.Workbook;

关于C# 加载项 Excel : ActiveSheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395375/

相关文章:

c# - 在 Excel 中根据提示删除工作表

c# - WPF在按钮上播放 “Click”动画。模拟代码点击

excel - Excel 中包含三个字段的饼图

excel - 禁用 VBA 用户窗体 'x' ,但仍允许卸载我

excel - 如何取消透视交叉表之类的表格?

c# - vsto 加载项中的本地化

email - 如何确定 Outlook 项目是否显示

c# - 向 ExpandoObjects 添加方法

c# - 如何在 C# 应用程序中安全地存储数据库登录名和密码?

c# - 服务器/客户端未发送所有字节(TCP 套接字)