Как я могу рассчитать значения после Worksheet.Calculate ()? - PullRequest
0 голосов
/ 11 мая 2018

Я пробовал пробную версию Gembox.SpreadSheet.

, когда я получаю ячейки [,]. Value с помощью for () или Foreach ().так что я думаю, что после Calculate () и получить значение Cell []., но этот путь тоже займет то же время.потребуется пересчитать, когда я получу ячейку []. value.

workSheet.Calcuate(); <- after this, values are Calculated, am i right?
for( int i =0; i <worksheet.GetUsedCellRange(true).LastRowIndex+1;++i)
{
    ~~~~for Iteration~~~
     var value =  workSheet.Cells[i,j].Value; <- re-Calcuate value(?)
}

, так что вот вопрос.Могу ли я получить рассчитанные значения?или вы, ребята, знаете функцию предварительного расчета или получите больше скорости?

1 Ответ

0 голосов
/ 11 мая 2018

К сожалению, я не уверен, что именно вы спрашиваете, не могли бы вы попытаться переформулировать свой вопрос, чтобы его было легче понять?

Тем не менее, вот некоторая информация, которая, я надеюсь, выВы найдете полезное.
Чтобы выполнить итерацию по всем ячейкам, вы должны использовать одну из следующих команд:

1.

foreach (ExcelRow row in workSheet.Rows)
{
    foreach (ExcelCell cell in row.AllocatedCells)
    {
        var value =  cell.Value;
        // ...
    }
}

2.

for (CellRangeEnumerator enumerator = workSheet.Cells.GetReadEnumerator(); enumerator.MoveNext(); )
{
    ExcelCell cell = enumerator.Current;
    var value = cell.Value;
    // ...
}

3.

for (int r = 0, rCount = workSheet.Rows.Count; r < rCount; ++r)
{
    for (int c = 0, cCount = workSheet.CalculateMaxUsedColumns(); c < cCount; ++c)
    {
        var value = workSheet.Cells[r, c].Value;
        // ...
    }
}

Я полагаю, что все они будут иметь примерно одинаковые характеристики.
Однако, в зависимости от содержимого электронной таблицы, последняя может оказаться немного медленнее.Это потому, что он не выполняет итерацию исключительно через выделенные ячейки.

Так, например, допустим, у вас есть электронная таблица, которая имеет 2 строки.Первая строка пуста, у нее нет данных, а вторая строка имеет 3 ячейки.Теперь, если вы используете подход 1. или 2. тогда вы будете перебирать только те 3 ячейки во втором ряду, но если вы используете подход 3., то вы будете перебирать 3 ячейки в первом ряду (которые ранее не были выделены, а теперьэто потому, что мы получили к ним доступ), а затем через 3 ячейки во второй строке.

Теперь, что касается расчета, обратите внимание, что при сохранении файла в каком-либо приложении Excel он сохраняет последние рассчитанные значения формулы в нем.В этом случае вам не нужно вызывать метод Calculate, потому что у вас уже есть необходимые значения в ячейках.
Вы должны вызывать метод Calculate, когда вам нужно обновить, пересчитать формулы в вашей электронной таблице, например, после того, как у вас естьдобавлены или изменены некоторые значения ячеек.

Последнее, что касается вашего вопроса, его трудно понять, но тем не менее:

  • Могу ли я получить рассчитанные значения?
    Да, эта строка кода var value = workSheet.Cells[i,j].Value; должна дать вам вычисленное значение, потому что вы использовали метод Calculate перед ним.Однако, если у вас есть формулы, которые в настоящее время не поддерживаются механизмом вычислений GemBox.Spreadsheet, он не сможет рассчитать значение.Вы можете найти список поддерживаемых в настоящее время функций формул Excel здесь .

  • или вы, ребята, знаете функцию предварительного расчета или Получить больше скорости?
    Я не знаю, что означает «функция предварительного расчета», и для скорости, пожалуйста, обратитесь к первой части этого ответа.

...