none
问题大了。错误 CS1519,CS1520,CS1001,请大侠指点。 RRS feed

  • 问题

  • 这个项目是用VS2010  C#建立的EXCELWORKBOOK项目。(此项目用VB运行成功,想用C#来提高它的速度)
    作用是把一个2维数组输入到EXCELworkbook中。2维数组已经赋了值。
    利用功能区按钮button的Click事件调用Test函数,Test函数这调用hjjj函数,hjjj函数进行输入,Test函数计算hjjj函数的运行时间,并用小窗口显示结果。可以帮我看看下面3段代码吗?

    Click事件
            private void button1_Click(object sender, RibbonControlEventArgs e)
            {
                Globals. ExcelWorkbook.Test ()
            }

    Test函数
            public class Test :object
            {
                int asdd;
                int asddd;
                asdd = Environment.TickCount;
                hjjj(数组[][], Me.Worksheets(1))
                asddd = Environment.TickCount;
                MessageBox.how(" 填充时间 = " & (asddd - asdd) & " 毫秒");
            }

    hjjj函数
            private void hjjj()
            {
               
                Excel.Range rg = ws.Range(ws.Cells(1, 1), ws.Cells(数组.GetLength(0), 数组.GetLength(1)))
                rg.Value = 数组
            }
    2010年2月17日 7:28

答案

  • 你好,

    上面的WorkSheets应该是数组吧,所以不是this.Worksheets(1),而是this.Worksheets[1],
    另外hjjj中的代码:wss.Range方法是否存在还值得怀疑,我这边没有这个方法,但是可以用wss.get_Range()方法。
    该方法的两个参数是cell,所以wss.Cells也是一个数组,第一个参数为RowIndex,第二个为ColumnIndex。

    你对着我的描述然后查下资料应该可以解决上面报错的问题。

    我给的那个网站的VB与C#之间的转换对你的这个关于Excel的不是完全适用,因为Excel不是C#自带的类库,而是你引用office的组件后.NET帮你封装下。


    Microsoft Online Community Support
    2010年2月22日 5:11

全部回复

  • 理论上讲,VB.NET 和 C# 的代码都会编译成IL,你把代码修改成C# 不会提高性能。

    另: 你的代码并没有从VB.NET 完全改为C#,至少我还看到了Me。
    2010年2月17日 11:49
  • 前辈可以帮我修改一下吗,c#语言我不太熟,就请帮帮忙,占用你几分钟的时间,不然我几天已搞不好。谢谢,
    2010年2月17日 17:32
  • 你好!
    由于不是很了解你的项目,所以我只能大概帮助你修改几个地方,希望对你有帮助:
            public class Test
            {
                int asdd;
                int asddd;
                asdd = Environment.TickCount;
                hjjj(数组[][], this.Worksheets(1))
                asddd = Environment.TickCount;
                MessageBox.Show(" 填充时间 = " + (asddd - asdd).ToString() + " 毫秒");
            }
    周雪峰
    2010年2月18日 0:19
    版主
  • 你好,

    你可以到下面这个网站进行C#和VB之间的转换。

    http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Microsoft Online Community Support
    2010年2月18日 3:52
  • 谢谢诸位前辈。KeFang Chen前辈提供的网站很好。它把3段代码都重新编译了。很不错。
    Click事件
            private void button1_Click(object sender, RibbonControlEventArgs e)
            {
                Globals.ThisWorkbook.Test ();
            }

    Test函数
            public void Test() 
            {
                int  asdd = Environment.TickCount;
                hjjj(数组, this.Worksheets(1));           
                int  asddd = Environment.TickCount;
                MessageBox.how(" 填充时间 = " & (asddd - asdd) & " 毫秒");
            }

    hjjj函数
            private void hjjj(int[,] array, Excel.Worksheet wss)
            {
                Excel.Range rrg = wss.Range(wss.Cells(1, 1), wss.Cells(array.GetLength(0),array.GetLength(1)));
                rrg.Value = array;
            }

    可是在第2段代码中的‘Worksheets(1)'.最后一段代码中的第2个’Range‘。和俩个’Cells‘。显示有错误。
    错误原因“Non-invocable member "Microsoft.office.Tools.Excel.Workbook.Worksheets" cannot be used like a method.”。还请前辈指点。
    2010年2月18日 8:16
  • 你好,

    上面的WorkSheets应该是数组吧,所以不是this.Worksheets(1),而是this.Worksheets[1],
    另外hjjj中的代码:wss.Range方法是否存在还值得怀疑,我这边没有这个方法,但是可以用wss.get_Range()方法。
    该方法的两个参数是cell,所以wss.Cells也是一个数组,第一个参数为RowIndex,第二个为ColumnIndex。

    你对着我的描述然后查下资料应该可以解决上面报错的问题。

    我给的那个网站的VB与C#之间的转换对你的这个关于Excel的不是完全适用,因为Excel不是C#自带的类库,而是你引用office的组件后.NET帮你封装下。


    Microsoft Online Community Support
    2010年2月22日 5:11
  • 你好,

    上面的WorkSheets应该是数组吧,所以不是this.Worksheets(1),而是this.Worksheets[1],
    另外hjjj中的代码:wss.Range方法是否存在还值得怀疑,我这边没有这个方法,但是可以用wss.get_Range()方法。
    该方法的两个参数是cell,所以wss.Cells也是一个数组,第一个参数为RowIndex,第二个为ColumnIndex。

    你对着我的描述然后查下资料应该可以解决上面报错的问题。

    我给的那个网站的VB与C#之间的转换对你的这个关于Excel的不是完全适用,因为Excel不是C#自带的类库,而是你引用office的组件后.NET帮你封装下。


    Microsoft Online Community Support

    谢谢前辈的指点。应该是我的c#语言基础太差,我会按照前辈的指点在调试,在学习。
    2010年2月22日 11:13