1

これを行うには多くの提案があるようですが、どれも機能していないようです。

事実上、Excelシートのテキスト値を数値に変更したいと考えています(これは、テキストとして保存された数値として設定されたセルで、横に緑色のひし形があります)。

このWeb ページでは、UI を介して 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
4

3 に答える 3

1

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();
于 2010-02-03T23:01:56.653 に答える
0

代わりにセルのフォーマットを変更する方が良いのではないでしょうか。私はあなたが使用してフォーマットをつかむことができるはずだと信じています

range.NumberFormat

そして、それを必要な実際の形式に変更します...次に、列全体またはシート全体の範囲を設定できます。

于 2010-01-27T12:38:29.320 に答える
0

わかりました、ここで質問として提起すると、脳波がトリガーされました。これはうまくいくようです:

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);
于 2010-01-27T12:44:59.600 に答える