7

VBA で次の Excel-DNA-Method を呼び出そうとすると、サイズ 1 の配列しか得られません (65536 行の後、配列は実際の配列サイズ - 65537 にサイズ変更されているようです)。シート内のメソッドを配列関数として呼び出すと、すべてが機能します。

[ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
        public static object[] example() {
            object[] ret = new object[65537];
            return ret;
        }

私は Excel 2007 を使用しています。シートは xlsm-Worksheet です。このような 2 次元配列を使用すると、すべて正常に動作します。

 [ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
        public static object[,] example() {
            object[,] ret = new object[65537,1];
            return ret;
        }

ただし、二次元配列を逆に使用する場合と同じように

[ExcelFunction(Description = "Example", Name = "Example", HelpTopic = "")]
        public static object[,] example() {
            object[,] ret = new object[1,65537];
            return ret;
        }

誰かがこれを回避する方法を知っていますか?

VBAで同じことをするとうまくいきます

Function test()
    Dim ret As Variant
    ReDim ret(65536)
    test = ret
End Function

Sub testSub()
    Dim output
    output = Application.Run("test")
End Sub

出力の次元は 65537 (インデックスは 0 から始まります) で、65537 より大きい数値も機能します。

4

1 に答える 1

2

2 次元配列を使用して次元を反転させて異なるパフォーマンスを示したことを考えると、行や列の制限に達しているように聞こえます。

このページ: http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP010073849.aspxは、Excel 2007 の制限を示しています。ワークシートは 16,384 に制限されており、この値は何倍も超えています。一方、1,048,576 の行制限は、65537 の値に簡単に対応できます。

私の推測では、65537 列のオブジェクトを要求すると、コンストラクターはオーバーフローを黙って処理し、1 に解決していると思います。

于 2013-02-16T14:38:28.767 に答える