У меня проблемы с производительностью моего решения VSTO, я думаю, что причина в основном в том, как cellColor устанавливается ячейка за ячейкой.
Это зависит от данных из набора записей и поэтому каждый раз отличается. (Я не могу использовать copyFormats из другой строки / столбца)
это похоже на заполнение диапазона значений, только для этого есть несколько методов.
Сначала я подумал о создании всего этого в C # в памяти (массив XlColorIndex [,]), через который я передаю метод VBA, аналогичный приведенному ниже:
Sub fillInterior(ByRef rg As Range, a As Variant)
//a is a double array that represents the colors for the spreadsheet
Dim r As Long, c As Long
Dim tmpRg As Range
r = 1
c = 1
For Each Row In a
For Each colorIdx In Row
Set tmpRg = rg(r, c)
With tmpRg.Interior
.ColorIndex = colorIdx
.PatternColorIndex = xlAutomatic
.PatternColor = xlSolid
End With
c = c + 1
Next
c = 1
r = r + 1
Next
End Sub
Я пытался назвать этот макрос следующим образом, но пока не увенчался успехом, любые указатели очень ценятся:
Excel.Range rg = this.Range[this.Cells[5, 3], this.Cells[6, 4]];
object[,] test2 = new object[2, 2];
test2[0, 0] = 15;
test2[0, 1] = 15;
test2[1, 0] = 15;
test2[1, 1] = 15;
this.Application.Run("Sheet1.fillInterior", rg, test2,
System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing,
System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing,
System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing,
System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);
Я пробовал int [,] -
Я получил другую ошибку, когда попробовал Nullable int или Double:
double? [,] (Array of Nullable Double):
The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
Если я не пробую обнуляемые типы, я получаю следующую ошибку HRESULT (Несоответствие типов?)
Exception from HRESULT: 0x800A000D