Проблема производительности (в контексте взаимодействия) для написания формулы столбца - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующий пример кода:

// number offsets for the excel worksheet
public static int rowOffset = 2;
public static int colOffset = 2;
// I receive a huge 2d array
object[,] res = anArrayWithHugeDimensions;
// I get its dimensions
int resNbCol = res.GetLength(1);
int resNbRows = res.GetLength(0);
// I output it in excel using ranges, for optimal performance
/*Microsoft.Office.Interop.Excel.*/Range topLeft = (Range) worksheet.Cells[rowOffset, colOffset];
Range bottomRight = (Range)worksheet.Cells[rowOffset + resNbRows - 1, colOffset + resNbCol - 1];
Range rng = worksheet.get_Range(topLeft, bottomRight);
rng.Value = res;
// I insert a column
Range oRng = worksheet.Range["C1"];
oRng.EntireColumn.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftToRight,
    Microsoft.Office.Interop.Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
worksheet.Cells[rowOffset, 1 + colOffset] = "RichKey";
// I write formulas in the columns
for (int i = 1; i < resNbRows; ++i)
{
    worksheet.Cells[i + rowOffset, 1 + colOffset] = $"{(worksheet.Cells[i + rowOffset, 4  as Range).Value2]}_" +
                                                    $"{(worksheet.Cells[i + rowOffset, 7  as Range).Value2]}_" +
                                                    $"{(worksheet.Cells[i + rowOffset, 8  as Range).Value2]}_" +
                                                    $"{(worksheet.Cells[i + rowOffset, 10 as Range).Value2]}_" +
                                                    $"{10000 * (double) (worksheet.Cells[i + rowOffset, 11] as Range).Value2}";
}

В основном я получаю огромное object[,] res, я выводю его на лист, используя диапазоны, чтобы получить время, затем я вставляю столбец, и в этом столбцев данной строке формула будет зависеть от клеток в той же строке, но в других столбцах.(См. Цикл for.)

Проблема в том, что этот цикл for действительно медленный и полностью убивает факт использования диапазона для печати огромного массива в Excel.

Есть ли лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...