Как преобразовать текстовые значения в числовые значения в Excel 2003 (число, сохраненное как текст), используя С#

Кажется, есть ряд предложений сделать это, но ни одно из них не работает.

По сути, я хочу изменить текстовое значение на листе Excel на число (это ячейка, которая была установлена ​​​​как число, сохраненное как текст, и рядом с ним есть зеленый ромб).

На этой веб-странице подробно описано, как решить проблема в Excel через пользовательский интерфейс, и я записал это как макрос ниже (но это VBA)...

В том числе установить значение самому себе:

                Range allCellsRng;
                string lowerRightCell = "AZ500";
                allCellsRng = wSheet.get_Range("A1", lowerRightCell).Cells;
                foreach (Range cell in allCellsRng)
                {
                    if (cell.Value2.ToString().Length > 0)
                    {
                        cell.Value2 = cell.Value2;
                    }
                }

Это записанный макрос VB, который показывает, что решит проблему, но у меня проблемы с представлением этого на С#:

ActiveCell.FormulaR1C1 = "0"
Range("A1").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks _
    :=False, Transpose:=False
Range("A1").Select

person Nick Haslam    schedule 27.01.2010    source источник


Ответы (3)


С Clear Office код очень прост:

SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName);
foreach (Worksheet worksheet in spreadsheetDocument.Workbook.Sheets.OfType<Worksheet>())
{
    foreach (Cell cell in worksheet.GetRange("A1:AZ500"))
    {
        string s = cell.Value as string;
        if (s == null)
            continue;
        double d;
        if (double.TryParse(s, out d))
            cell.Value = d;
        }
    }
spreadsheetDocument.Save();
person user265751    schedule 03.02.2010

Не лучше ли вместо этого изменить формат ячейки? Я считаю, что вы должны иметь возможность захватить формат, используя

range.NumberFormat

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

person Ian    schedule 27.01.2010
comment
Ячейка уже отформатирована как число, просто Excel сохраняет число как текст. Согласно ссылке на веб-страницу, если вы нажмете F2 и войдете (в основном откроете ячейку и выйдете из нее), число будет сохранено как число. - person Nick Haslam; 27.01.2010
comment
Если я не ошибаюсь, есть определенный NumberFormat, который говорит, что хранить как текст, или префикс значения с префиксом ' делает то же самое. - person Ian; 27.01.2010
comment
В противном случае, почему бы вам не использовать метод Range.PasteSpecial()? - person Ian; 27.01.2010

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

Range cellA1 = wSheet.get_Range("A1", System.Type.Missing);
cellA1.Value2 = "0";
cellA1.Copy(System.Type.Missing);
Range cellAll = wSheet.get_Range("A1:AZ500", System.Type.Missing);
cellAll.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationAdd,
        false, false);
person Nick Haslam    schedule 27.01.2010
comment
Если макрос сработает, то и это сработает, так как он точно такой же, как макрос... - person Ian; 27.01.2010
comment
Этот код работает только тогда, когда вы устанавливаете значение первой ячейки равным 0, как вы это делали, однако в любом другом случае он просто суммирует его, что приводит к неверным результатам. - person Jim; 24.02.2016