2013-02-01 9 views
5

Wie setze ich die Range.EntireColumn.NumberFormat mit der späten Bindung? Ich bin derzeit diesen Code haben:Excel-Spätbindung EntireColumn.NumberFormat

object rg = ws.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, ws, new object[2]{1,iCol}); 
object ec = rg.GetType().InvokeMember("EntireColumn", BindingFlags.GetProperty, null, rg, null); 
rg.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty, null, rg, new object[1] { "DD/MM/YYYY" }); 

Und auch für die AutoFit-Methode, ich habe dies:

object rng = ws.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, ws, null); 
object cols = rng.GetType().InvokeMember("Columns", BindingFlags.GetProperty, null, rng, null); 
cols.GetType().InvokeMember("AutoFit", BindingFlags.InvokeMethod, null, cols, null); 

für die AutoFit im nicht sicher, ob ich es gut mache.

+0

Hallo seyren, willkommen in SO! Ich komme aus der VBA-Welt und nicht C#, also könnte das nicht funktionieren, aber versuche es dennoch. Wenn 'ws' oder' rg' als Objekte definiert sind, aber tatsächlich ein Arbeitsblatt oder ein Bereichsobjekt sind, können Sie einfach auf ihre Methoden/Eigenschaften genauso wie bei der frühen Bindung zugreifen. Versuche also 'ws.Cells (...)'! –

+0

Ihr Autofit-Code funktioniert auch für mich ... –

+0

Hallo Siddharth - danke für die Antwort, krank versuche es jetzt, mein Problem ist der Code hat einfach nicht funktioniert, es tut nicht, was es tun sollte, aber zu betrachten Ich denke, ich missverstand die Verwendung der LateBinding Ich denke, es war mein erstes Mal es verwenden, aber danke :) –

Antwort

4

Und

private void button1_Click(object sender, EventArgs e) 
{ 
    object xlApp; 
    object xlWbCol; 
    object xlWb; 
    object xlSheet; 
    object xlRange; 
    object xlWsCol; 

    //~~> create new Excel instance 
    Type tp; 
    tp = Type.GetTypeFromProgID("Excel.Application"); 
    xlApp = Activator.CreateInstance(tp); 

    object[] parameter = new object[1]; 
    parameter[0] = true; 
    xlApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, xlApp, parameter); 
    xlApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, xlApp, parameter); 

    //~~> Get the xlWb collection 
    xlWbCol = xlApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, xlApp, null); 

    //~~> Create a new xlWb 
    xlWb = xlWbCol.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWbCol, null); 

    //~~> Get the worksheet collection 
    xlWsCol = xlWb.GetType().InvokeMember("WorkSheets", BindingFlags.GetProperty, null, xlApp, null); 

    //~~> Create a new workxlSheet 
    xlSheet = xlWb.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWsCol, null); 

    //~~> Assign cell to xlRange object 
    xlRange = xlSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, xlSheet, new object[2] { 1, 1 }); 

    //~~> Write a date to cell 
    xlRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, xlRange, new object[] { "1-1-2012" }); 

    //~~> Get the column 
    object cols = xlRange.GetType().InvokeMember("Columns", BindingFlags.GetProperty, null, xlRange, null); 

    //~~> Autofit the column 
    cols.GetType().InvokeMember("AutoFit", BindingFlags.InvokeMethod, null, cols, null); 
    //~~> Format the entire Column 
    cols.GetType().InvokeMember("NumberFormat", BindingFlags.SetProperty, null, cols, new object[1] { "DD/MM/YYYY" }); 

    //~~> Release the object 
    //System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); 
} 

Hinweis Getestet Versuchte: using System.Reflection; hinzufügen An der Spitze

Followup

Für Autofit für usedrange das funktioniert

private void button1_Click(object sender, EventArgs e) 
{ 
    object xlApp; 
    object xlWbCol; 
    object xlWb; 
    object xlSheet; 
    object xlRangeUsdRng; 
    object xlRange; 
    object xlWsCol; 

    //~~> create new Excel instance 
    Type tp; 
    tp = Type.GetTypeFromProgID("Excel.Application"); 
    xlApp = Activator.CreateInstance(tp); 

    object[] parameter = new object[1]; 
    parameter[0] = true; 
    xlApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, xlApp, parameter); 
    xlApp.GetType().InvokeMember("UserControl", BindingFlags.SetProperty, null, xlApp, parameter); 

    //~~> Get the xlWb collection 
    xlWbCol = xlApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, xlApp, null); 

    //~~> Create a new xlWb 
    xlWb = xlWbCol.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWbCol, null); 

    //~~> Get the worksheet collection 
    xlWsCol = xlWb.GetType().InvokeMember("WorkSheets", BindingFlags.GetProperty, null, xlApp, null); 

    //~~> Create a new workxlSheet 
    xlSheet = xlWb.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, xlWsCol, null); 

    //~~> Assign cell F5 to xlRange object for testing purpose 
    xlRange = xlSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, xlSheet, new object[2] {5, 6 }); 
    xlRange.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, xlRange, new object[] { "1-1-2012" }); 

    //~~> Assign UsedRange 
    xlRangeUsdRng = xlSheet.GetType().InvokeMember("UsedRange", BindingFlags.GetProperty, null, xlSheet, null); 

    //~~> Get the Columns 
    object cols = xlRangeUsdRng.GetType().InvokeMember("EntireColumn", BindingFlags.GetProperty, null, xlRangeUsdRng, null); 

    //~~> Autofit 
    cols.GetType().InvokeMember("AutoFit", BindingFlags.InvokeMethod, null, cols, null); 

}