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

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

По сути, я хочу изменить текстовое значение на листе 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, который показывает, что решит проблему, но у меня возникают проблемы с представлением этого в C#:

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

3 ответа

Решение

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

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);

С 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();

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

range.NumberFormat

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

Другие вопросы по тегам