【问题标题】:Excel Late Binding EntireColumn.NumberFormatExcel 后期绑定 EntireColumn.NumberFormat
【发布时间】:2013-02-01 07:36:13
【问题描述】:

如何使用后期绑定设置 Range.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" });

对于 AutoFit 方法,我有这个:

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

对于 AutoFit,我不确定我是否做得很好。

【问题讨论】:

  • 嗨,seyren,欢迎来到 SO!我来自 VBA 世界而不是 c#,所以这可能行不通,但还是试一试。如果wsrg 被定义为对象但实际上是工作表或范围对象,您可以像使用早期绑定一样简单地访问它们的方法/属性。因此,请尝试,ws.Cells(...)
  • 您的自动调整代码也适用于我...
  • 嗨 Siddharth - 谢谢你的回答,我现在试试,我的问题是代码不起作用,它没有做它应该做的事情,但我认为看看你的代码我误解了使用后期绑定我认为它是因为这是我第一次使用它但是谢谢:)
  • 仅使用您之前发布的代码找到了 numberFormat 的解决方案,因此您现在可以返回它,我只是遍历每个单元格并一个一个地设置它们的格式,唯一剩下的项目是 autoFit谢谢@SiddharthRout !!
  • 见后续。在下面的答案中为Autofit

标签: c# excel late-binding


【解决方案1】:

久经考验

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

}

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多