excel2000和excel2003打开excel文件的方法参数不同,所以需要在程序里判断安装环境是2000还是2003,然后调用不同的方法.
问题有2个:
1.如何在C#中判断安装环境的excel版本;
2.如何让C#编译时忽略调用不同方法导致参数不匹配错误,如本机装2000,则编译时2003的方法肯定不能通过;
问题有2个:
1.如何在C#中判断安装环境的excel版本;
2.如何让C#编译时忽略调用不同方法导致参数不匹配错误,如本机装2000,则编译时2003的方法肯定不能通过;
2 找到execl的组件或者.exe
3 通过Fileversion.getversion方法获取版本
4 通过判断版本调用不同方法
你因用 2000 的在 2003 下应该不会出问题
但是如果引用 2003 的就不好说了就像用 ado1.5 的编译完vb程序现在还好用一样!
Excel._Application xlApp=new Excel.ApplicationClass();
object missing=Type.Missing;
Excel._Workbook xlBook=xlApp.Workbooks.Open(filename,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
这段代码如何用反射来做?
跟下面差不多,但因为Open方法并不是xlApp的直接成员,不知道如何调用它?Type t = typeof(Excel.ApplicationClass);
Object xlApp=t.InvokeMember(null,BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.CreateInstance,null,null,null);
Object[] args = new Object[]{filename,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing};
Excel._Workbook xb=(Excel._Workbook)t.InvokeMember("Open",BindingFlags.Default|BindingFlags.InvokeMethod,null,xlApp,args);解决上面问题马上给分,谢谢!
纯C#代码的Excel读取源代码
2007-12-8 21:31:01
本代码使用纯C#编写,不需要Office Excel Com组件的支持,它的功能包括:读出在工作簿(workbook)中的所有Worksheet,读出所有WorkSheet中的单元,读取单元的内容(文本,数字,日期或错误),读取单元的格式(字体,对齐,线条类型,背景等),够读取文件中的图片,获取图象的大小,位置,数据和格式
这段代码如何用反射来做?
跟下面差不多,但因为Open方法并不是xlApp的直接成员,不知道如何调用它?
-----------------分割線---------------------
object Workbooks = xlApp.GetType().GetProperty("Workbooks").GetValue(xlApp, null);
MethodInfo method = Workbooks.GetType().GetMethod("Open");
Excel._Workbook xlBook = (Excel._Workbook)method.Invoke(Workbooks, new object[]{"filename",
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,});
private void button1_Click(object sender, EventArgs e)
{
object objApp;
object objBook;
object objBooks;
object objSheets;
object objSheet;
object objRange;
object objCells;
object[] Parameters; try
{
// 获取Excel类型并建立其实例
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
if (objExcelType == null)
{
return;
}
objApp = Activator.CreateInstance(objExcelType);
if (objApp == null)
{
return;
}
//获取Workbook集
objBooks = objApp.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, objApp, null); //添加一个新的Workbook
objBook = objBooks.GetType().InvokeMember("Add", BindingFlags.InvokeMethod, null, objBooks, null); //获取Sheet集
objSheets = objBook.GetType().InvokeMember("Worksheets", BindingFlags.GetProperty, null, objBook, null); //获取第一个Sheet对象
Parameters = new Object[1] { 1 };
objSheet = objSheets.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, objSheets, Parameters); try
{ //获取操作范围
for (int i = 1; i < 100; i++)
{
Parameters = new Object[2] { 1, i };
objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters);
//向指定单元格填写内容值
Parameters = new Object[1] { "Hello, World!" };
objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters);
} }
catch (Exception operException)
{
MessageBox.Show(operException.Message);
}
finally
{
//不提示保存
Parameters = new Object[1] { false };
objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters); //保存文件并退出
Parameters = new Object[1] { @"D:\a.xls" };
objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters);
objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null);
GC.Collect();
}
}
catch (Exception theException)
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat(errorMessage, theException.Message);
errorMessage = String.Concat(errorMessage, " Line: ");
errorMessage = String.Concat(errorMessage, theException.Source); MessageBox.Show(errorMessage, "Error");
}
}