Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#vsto添加工作表_C#_Excel_Vsto - Fatal编程技术网

C#vsto添加工作表

C#vsto添加工作表,c#,excel,vsto,C#,Excel,Vsto,我所有的代码都可以工作,但当我写入新工作表中的单元格时,会写入第一张工作表1。在单击事件结束之前,不会创建图纸 单击事件之后是否还有其他事件可以触发以填充创建的新图纸 我怎样才能解决这个问题?谢谢 using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; using Microsoft.Office.Tools.Ribbon; using Excel = Microsoft.Office.Interop

我所有的代码都可以工作,但当我写入新工作表中的单元格时,会写入第一张工作表1。在单击事件结束之前,不会创建图纸

单击事件之后是否还有其他事件可以触发以填充创建的新图纸

我怎样才能解决这个问题?谢谢

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Microsoft.Office.Tools.Ribbon;
using Excel = Microsoft.Office.Interop.Excel;


namespace Prototype
{
    public partial class Ribbon1
    {
        private Excel.Application xlApp;
        private Workbook xlWorkBook;
        private Worksheet xlWorkSheet;
        private dynamic excelSheet;
        private Range range;

        private void Ribbon1_Load(object sender, RibbonUIEventArgs e) { }

        private void Button1_Click(object sender, RibbonControlEventArgs e)
        {
            xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
            xlApp.Visible = true;
            xlWorkBook = xlApp.ActiveWorkbook;
            xlWorkSheet = xlWorkBook.Worksheets.Item[1];
            excelSheet = xlWorkBook.ActiveSheet;
            xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
            xlWorkBook = xlApp.ActiveWorkbook;

            xlWorkBook.Sheets.Add(After: xlWorkBook.Sheets[xlWorkBook.Sheets.Count]);
            xlWorkSheet = xlWorkBook.Worksheets.Item[2];
            xlWorkSheet.Select();
            xlWorkSheet.Name = "Dashboard";

            xlWorkBook.Sheets.Add(After: xlWorkBook.Sheets[xlWorkBook.Sheets.Count]);
            xlWorkSheet = xlWorkBook.Worksheets.Item[3];
            xlWorkSheet.Select();
            xlWorkSheet.Name = "Dashboard2";

            xlWorkBook.Worksheets.Add(After: xlWorkBook.Sheets[xlWorkBook.Sheets.Count]);
            xlWorkSheet = xlWorkBook.Worksheets.Item[4];
            xlWorkSheet.Select();
            xlWorkSheet.Name = "Dashboard3";

            xlWorkSheet = (Worksheet)xlWorkBook.Worksheets["Dashboard"];
            xlWorkSheet.Select();
            range = excelSheet.Cells[1, 1];
            range.Value2 = "Test";

            xlWorkSheet = (Worksheet)xlWorkBook.Worksheets["Dashboard2"];
            xlWorkSheet.Select();
            range = excelSheet.Cells[1, 1];
            range.Value2 = "Test";
        }
    }
}

您正在根据创建新工作表之前定义为活动工作表的
excelSheet
定义范围。选择
xlsheet
并不意味着
excelSheet
更改了值。你的代码应该是

xlWorkSheet = (Worksheet)xlWorkBook.Worksheets["Dashboard"];
range = xlWorkSheet.Cells[1, 1];
range.Value2 = "Test";

xlWorkSheet = (Worksheet)xlWorkBook.Worksheets["Dashboard2"];
range = xlWorkSheet.Cells[1, 1];
range.Value2 = "Test";

另外,如果您为每个工作表定义不同的变量,而不是重用变量,则会更好。这样代码看起来就更干净了