C# Excel后期绑定entireclumn.NumberFormat
如何使用后期绑定设置Range.EntireColumn.NumberFormat?我目前拥有以下代码:C# Excel后期绑定entireclumn.NumberFormat,c#,excel,late-binding,C#,Excel,Late Binding,如何使用后期绑定设置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
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,我不确定我是否做得很好。经过了尝试和测试
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);
}
注意:使用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);
}
嗨,赛伦,欢迎来到SO!我来自VBA世界,不是c#,所以这可能不起作用,但还是试试吧。如果ws
或rg
被定义为对象,但实际上是一个工作表或范围对象,则可以使用与早期绑定相同的方法访问它们的方法/属性。因此,请尝试,ws.Cells(…)
!你的autofit代码也适用于我…Hi Siddharth-谢谢你的回答,我现在就试试,我的问题是代码不起作用,它没有做它应该做的事情,但是看看你的代码,我想我误解了使用latebinding,我想这是因为这是我第一次使用它,但是谢谢:)找到了数字格式的解决方案,只是使用你之前发布的代码,所以你现在可以返回它,我只是在每个单元格中循环,然后一个接一个地设置它们的格式,剩下的只有autoFit感谢@SiddharthRout!!请参阅后续内容。在下面关于Autofit