Bu kodu excel'i açan ve bir hücrenin değerini ayarlayan bu kodu (bu, gerçek kodun basitleştirilmiş bir sürümüdür) var. Lütfen İtalya'da olduğumu ve yerine ,'u kullandığımızı unutmayın. Ondalık basamakları ayırmak için. Bu kodda 12.5 kullanıyorum, ancak bu sayı ToString()
sonucu "12,5" ve Excel de 12,5 gösterir.Bir Excel hücre değerini C# 'da ondalık olarak ayarlama. .NET 2 ve .NET 4 arasındaki farklar
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);
}
}
Her şey .NET 2'yi kullanarak yıllarca iyi çalıştı, ama .NET 4 geçmek çalıştığınızda Excel Numara metin olarak depolanan edildiğini beni uyarıyor etti.
Sadece ToString() yöntemini çağırmaktan kaçınmanın problemi çözdüğünü bildiğimi, ancak asıl durumda excel'e, hem basetypes hem de kullanıcı tanımlı olanlara çeşitli veri depolamak isteyen eski bir uygulama ile uğraştığımı lütfen unutmayın. ve ToString(), bu türlerde, türün kontrol edilmesine ve set_Value'ye neyin geçeceğine karar vermeden Excel'de istenen sonucu veren tek yöntemdi.
Çalışmak için kodumu nasıl değiştireceğimi sormuyorum. Ben sadece davranışın çerçevenin iki versiyonunda neden farklı olduğunu anlamaya çalışıyorum. Bu çok önemli çünkü kullanıcılar yanlış bir şey olduğunu öğrenmeden önce kodumu değiştirmeyi tercih ederim.
Neden .NET 2 ve .NET 4 arasında bir fark olduğunu, ancak Excel'in hangi sürümünü kullandığınız hakkında hiçbir fikrim yok? Bunun sadece bir Excel sürüm farkı olmadığından emin misiniz? – flindeberg
Excel sürümüne bağlı görünmüyor. Excel 2003 ve Excel 2010 ile denedim ve aynı sonuçları aldım. –
Keşke cevabı bilmemi isterdim, ama .NET 4'ün Interop'un çalışma şekli hakkında çok şey yaptığını biliyorum. Kesin bir açıklama bulamıyorum, ancak Interop'un çevresindeki kırılma değişiklikleri listelediğiniz kodun etrafında bazı ilginç noktalar yaratıyor: http://msdn.microsoft.com/en-us/library/ee855831%28VS.100%29.aspx Yani, birlikte çalışma türlerinin gömülmesi ve isteğe bağlı parametrelerin nasıl ele alındığı, gördüğünüz şeylere işaret ediyor gibi görünmektedir. –