引用里添加了一个Interop.Excel.dll的文件,为什么using 了以后,编译说找不到Interop?(菜鸟问题) 你用是 professional版的吧, 直接用Excel名字空间就行了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你已经添加引用了就不要用using 了哪是多此一举 morefish(little)你用是 professional版的吧, 直接用Excel名字空间就行了。=========================太對了 最好使用后期绑定操作Excel,这样就不会存在这样的问题及版本的问题了. 代码可以参考下面的:/// <summary>/// 把DataTable的数据导出到Excel文件中/// </summary>/// <param name="fileName">Excel文件名</param>/// <param name="dataTable">要导出的数据表</param>/// <param name="errorInfo">操作出错信息</param>/// <returns>是否导出成功</returns>public static bool GenerateExcel(string fileName, DataTable dataTable, out string errorInfo){ errorInfo = null; object objApp; object objBook; object objBooks; object objSheets; object objSheet; object objCells; object[] Parameters; if (dataTable == null || dataTable.Rows.Count == 0) { return true; } try { // 获取Excel类型并建立其实例 Type objExcelType = Type.GetTypeFromProgID("Excel.Application"); if (objExcelType == null) { return false; } objApp = Activator.CreateInstance(objExcelType); if (objApp == null) { return false; } //获取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 = 0; i < dataTable.Columns.Count; i++) { Parameters = new Object[2] { 1, i + 1 }; objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters); //向指定单元格填写内容值 Parameters = new Object[1] { dataTable.Columns[i].Caption }; objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters); } //写入表中数据内容 for (int i = 0; i < dataTable.DefaultView.Count; i++) { for (int col = 0; col < dataTable.Columns.Count; col++) { Parameters = new Object[2] { i + 2, col + 1 }; objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters); //向指定单元格填写内容值 Parameters = new Object[1] { dataTable.DefaultView[i][col].ToString() }; objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters); } } } catch (Exception operExce) { errorInfo = operExce.Message; return false; } finally { //不提示保存 Parameters = new Object[1] { false }; objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters); //保存文件并退出 Parameters = new Object[1] { fileName }; objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters); objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null); } return true; } catch (Exception appExce) { errorInfo = appExce.Message; return false; }} List Remove【偏移量和长度超出数组的界限,或者计数大于从索引到源集合结尾处的元素数量】 一个自定义格式文件,包含图片和文字 C#下如何让两台动态IP上网的机器通过一个固定IP服务器建立连接呢? ERP软件开发 C# 如何得到上个月的某天几点 源程序自动format checkbox添加value 有个问题要想大伙请教一下 求助,远程监控系统 为什么try{}不起作用了?很急!支援! 控制台中动态显示百分比数字 程序的自动运行问题
就不要用using 了
哪是多此一举
你用是 professional版的吧, 直接用Excel名字空间就行了。
=========================
太對了
/// <summary>
/// 把DataTable的数据导出到Excel文件中
/// </summary>
/// <param name="fileName">Excel文件名</param>
/// <param name="dataTable">要导出的数据表</param>
/// <param name="errorInfo">操作出错信息</param>
/// <returns>是否导出成功</returns>
public static bool GenerateExcel(string fileName, DataTable dataTable, out string errorInfo)
{
errorInfo = null; object objApp;
object objBook;
object objBooks;
object objSheets;
object objSheet;
object objCells;
object[] Parameters; if (dataTable == null || dataTable.Rows.Count == 0)
{
return true;
} try
{
// 获取Excel类型并建立其实例
Type objExcelType = Type.GetTypeFromProgID("Excel.Application");
if (objExcelType == null)
{
return false;
}
objApp = Activator.CreateInstance(objExcelType);
if (objApp == null)
{
return false;
}
//获取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 = 0; i < dataTable.Columns.Count; i++)
{
Parameters = new Object[2] { 1, i + 1 };
objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters);
//向指定单元格填写内容值
Parameters = new Object[1] { dataTable.Columns[i].Caption };
objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters);
}
//写入表中数据内容
for (int i = 0; i < dataTable.DefaultView.Count; i++)
{
for (int col = 0; col < dataTable.Columns.Count; col++)
{
Parameters = new Object[2] { i + 2, col + 1 };
objCells = objSheet.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, objSheet, Parameters);
//向指定单元格填写内容值
Parameters = new Object[1] { dataTable.DefaultView[i][col].ToString() };
objCells.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, objCells, Parameters);
}
}
}
catch (Exception operExce)
{
errorInfo = operExce.Message;
return false;
}
finally
{
//不提示保存
Parameters = new Object[1] { false };
objApp.GetType().InvokeMember("DisplayAlerts", BindingFlags.SetProperty, null, objApp, Parameters); //保存文件并退出
Parameters = new Object[1] { fileName };
objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, Parameters);
objApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod, null, objApp, null);
}
return true;
}
catch (Exception appExce)
{
errorInfo = appExce.Message;
return false;
}
}