簡體   English   中英

如何使用 C# 在 Excel 上定位特定工作表

[英]How to positioning specific sheet on Excel with C#

伙計們...我需要 C# 和 Microsoft Excel 方面的幫助。

我所有的課程都可以很好地滿足我的需要,但現在我必須定位在我的工作簿的特定工作表上。

我所有的基類都在 C# 中,但我在 vb 上使用它:

    Private Shared app As NSCExcelApp
    Private Shared wb As WorkBook
    Private Shared ws As WorkSheet


    Public Shared Sub Simulate(_total As Double, _nameSheet As String)

        If (IsNothing(app)) Then
            app = New NSCExcelApp()
            app.Visible = true
            wb = app.OpenWorkbook(Path.Combine(Application.StartupPath, nameFileEXCEL))
        End If

        wb.ActiveSheet

        ws.Range("C2:C2".Select()
        app.ActiveCell.FormulaR1C1 = _totalToString("N2")

當我使用 wb.ActiveSheet 時,我可以獲得 activesheet(我的 .xlsx 中的第一個)。

但是,我怎樣才能得到另一張紙?

這些是我的課程:

  public class NSCExcelApp : Object
    {
        public Type ExcelType { get; set; }
        private object obj;

        public NSCExcelApp()
        {
            Type ExcelType = Type.GetTypeFromProgID("Excel.Application");
            obj = Activator.CreateInstance(ExcelType);
        }

        public NSCExcelApp(object obj)
        {
            this.obj = obj;
        }

        public WorkBook AddWorkBook()
        {
            object w = this.Workbooks;
            return new WorkBook(w.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, w, new object[] { -4167 }));
        }

        public WorkBook OpenWorkbook(string fileName)
        {
            return new WorkBook(Workbooks.GetType().InvokeMember("Open", 
                                                                 BindingFlags.InvokeMethod, null, 
                                                                 Workbooks , new object[1] { fileName }));
        }

        private object Workbooks
        {
            get
            {
                return obj.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, obj, null);
            }
        }

我有 WorkBook 類和 WorkSheet 類:

    public class WorkBook
    {
        Type WorkBookType { get; set; }
        object obj;

        public WorkBook(object obj)
        {
            WorkBookType = Type.GetTypeFromProgID("Excel.Workbook");
            this.obj = obj;
        }


        public WorkSheet ActiveSheet
        {
            get
            {
                return new WorkSheet(obj.GetType().InvokeMember("ActiveSheet", BindingFlags.GetProperty, null, obj, new object[] { }));
            }
            set
            {
                obj.GetType().InvokeMember("ActiveSheet", BindingFlags.SetProperty, null, obj, new object[] { value.obj });
            }
        }


        public WorkSheet Sheets(int index)
        {
            object o = obj.GetType().InvokeMember("Sheets", BindingFlags.GetProperty, null, obj, new object[] { });


            PropertyInfo[] x = o.GetType().GetProperties();

            o = o.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, obj, new object[1] { index });
            return new WorkSheet(o);
        }



    }

    public class WorkSheet
    {
        public object obj { get; set; }

        public WorkSheet(object obj)
        {
            this.obj = obj;
        }
    }

這將為您提供所需的工作表:(為 VB 而不是 C# 編輯,抱歉)

VB:

ws = wb.Worksheets("mysheetname")

C#:

ws = wb.Worksheets["mysheetname"];

將“mysheetname”替換為您需要的任何工作表名稱,例如“Sheet1”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM