大家都知道,C#裏沒有直接的方法能轉置一個數組,所以一般都用循環來完成。
爲此我上次專門在CSDN上發了個貼,詢問VSTO裏用C#有沒有辦法可以不用循環來轉置數組,但沒得到結果,爲此我還抱怨了微軟好久,C#的功能竟然還不及VBA。
今天,突然閃過一個念頭,VBA裏可以調用EXCEL的工作表函數,那VSTO裏是否也可以呢?試了一下,原來真可以,鬱悶了,以前轉了那麼多彎路。測試代碼如下:private void button1_Click(object sender, EventArgs e)
{
int[,] arr = new int[5, 5];
int count=0;
for (int i = 0; i < 5; i++)
{
for (int j =0; j < 5; j++)
{
arr[i,j] = count;
count++;
}
}
Range["a1", missing].get_Resize(5, 5).Value2= arr;
Range["a10", missing].get_Resize(5, 5).Value2 =
Application.WorksheetFunction.Transpose(arr);
}
想通這個道理,以後用起VSTO來就可以少走許多彎路了,比如C#的數組裏需要取一個最大值,可以用EXCEL的MAX函數,簡便了許多。
作者:laoyebin(Paladin.lao)個人網站英文出處:http://mrvsto.com/個人網站中文出處:http://cn.mrvsto.com/
爲此我上次專門在CSDN上發了個貼,詢問VSTO裏用C#有沒有辦法可以不用循環來轉置數組,但沒得到結果,爲此我還抱怨了微軟好久,C#的功能竟然還不及VBA。
今天,突然閃過一個念頭,VBA裏可以調用EXCEL的工作表函數,那VSTO裏是否也可以呢?試了一下,原來真可以,鬱悶了,以前轉了那麼多彎路。
{
int[,] arr = new int[5, 5];
int count=0;
for (int i = 0; i < 5; i++)
{
for (int j =0; j < 5; j++)
{
arr[i,j] = count;
count++;
}
}
Range["a1", missing].get_Resize(5, 5).Value2= arr;
Range["a10", missing].get_Resize(5, 5).Value2 =
Application.WorksheetFunction.Transpose(arr);
}