2013-02-01 43 views
5

如何使用後期綁定設置Range.EntireColumn.NumberFormat?不知道如果我做的很好Excel中後期綁定EntireColumn.NumberFormat

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

的自動調整IM:我目前有這樣的代碼:

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

,也爲自動調整方法,我有這個。

+0

嗨seyren,歡迎SO!我來自VBA世界,而不是c#,所以這可能無法正常工作,但請儘管嘗試。如果'ws'或'rg'被定義爲對象,但實際上是一個工作表或一個範圍對象,那麼您可以像早期綁定一樣簡單地訪問它們的方法/屬性。因此,試試'ws.Cells(...)'! –

+0

您自動調整代碼也對我的作品...... –

+0

亞洲時報Siddharth嗨 - 感謝您的回答,虐待嘗試,現在,我的問題是代碼只是沒有工作,也沒有做什麼是應該做的,但在看你的代碼我想我誤會使用latebinding我認爲其原因是其使用它,但感謝是我第一次:) –

回答

4

久經考驗

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

注意:添加using System.Reflection;在頂部

隨訪

對於自動調整爲usedrange這個作品

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

}