7

Excelを開いてセルの値を設定するこのコード(これは実際のコードの簡略化されたバージョンです)があります。私はイタリアにいて代わりに, を使用していることに注意してください10 進数を分離します。これは、コードで 12.5 を使用していることを意味しますが、ToString()この数値の結果は "12,5" であり、Excel にも 12,5 が表示されます。

using Xls = Microsoft.Office.Interop.Excel;

public class ExcelTest
{
    public static void Test
    {
        object hmissing = System.Reflection.Missing.Value;
        // create an instance of Excel and make it visible            
        Xls.Application anApp = new Xls.ApplicationClass();
        anApp.Visible = true;
        // add an empty workbook
        Xls.Workbooks wbks = anApp.Workbooks;
        wbks.Add(hmissing);
        Marshal.ReleaseComObject(wbks);
        // set the value of the first cell
        Decimal d = 12.5m;
        Xls.Range aRange = anApp.get_Range("A1", hmissing);
        aRange.set_Value(Xls.XlRangeValueDataType.xlRangeValueDefault, d.ToString());
        Marshal.ReleaseComObject(aRange);
    }
}

.NET 2 を使用して何年も問題なく動作していましたが、.NET 4 に切り替えようとすると、数値が text として保存されているという警告が Excel に表示されます。

ToString() を呼び出さないようにするだけで問題が解決することはわかっていますが、実際には、ベースタイプとユーザー定義の両方のデータを Excel に保存するレガシー アプリケーションを扱っています。 ) は、型をチェックして set_Value に渡すものを決定する必要なく、Excel で目的の結果が得られる、これらすべての型で使用できる唯一のメソッドでした。

したがって、コードを機能させるためにコードを変更する方法を尋ねているわけではありません。フレームワークの 2 つのバージョンで動作が異なる理由を理解しようとしています。ユーザーが何か問題があることに気付く前にコードを変更したいので、これは非常に重要です。

4

2 に答える 2

-1

これを試して:

        Excel.Application excel = new Excel.Application();
        Excel.Workbook workbook = excel.Workbooks.Open(@"c:\test.xls", Missing.Value, Missing.Value,
                                                       Missing.Value, Missing.Value, Missing.Value,
                                                       Missing.Value, Missing.Value, Missing.Value,
                                                       Missing.Value, Missing.Value, Missing.Value, false,
                                                       Missing.Value, Missing.Value);

        Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];

        decimal dec = 12.5m;
        worksheet.get_Range("A1").Value = dec;

        DateTime date = DateTime.Now.Date;
        worksheet.get_Range("A2").Value = date;

        string str = "Hello";
        worksheet.get_Range("A3").Value = str;

        Marshal.FinalReleaseComObject(worksheet);
        workbook.Save();
        workbook.Close(false, Type.Missing, Type.Missing);
        Marshal.FinalReleaseComObject(workbook);
        excel.Quit();
        Marshal.FinalReleaseComObject(excel);
于 2013-09-12T06:32:47.197 に答える