我原来用VB操作EXCEL时遇到过这样的问题,我是这样解决的,将所有变量的声明改成Object,再把需要用到的各种版本的excel库文件添加到引用中。OK!C#我没用过,不知道可以用同样的处理方法。你可以试试。下面是我的VB源码,方便你理解。 'Dim TempApp As Application 'Dim Exwbook As Excel.Workbook 'Dim Exsheet As Excel.Worksheet Dim TempApp As Object Dim Exwbook As Object Dim Exsheet As ObjectSet TempApp = CreateObject("Excel.application") If TempApp Is Nothing Then MsgBox "请检查是否安装Microsoft Excell软件", vbExclamation, "问题": Exit Sub Set Exwbook = TempApp.Workbooks.Add Set Exsheet = Exwbook.Worksheets(1)
第三方的类库,这样就不需要excel了。 可以试试这个Koogra
OleDbConnection myOleConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False; data source=" + strFileName + "; Extended Properties='Excel 8.0;PersistSecurityInfo=False;HDR=YES;IMEX=no'"); myOleConn.Open(); string sql = "select [字段1] , [字段2] ,[字段3] from [sheet1$]"; OleDbDataAdapter MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, myOleConn); DataSet ds = new System.Data.DataSet(); MyCommand.Fill(ds); myOleConn.Close(); return ds.Tables[0];
将DataGridView控件中数据导出到Excel函数 /// <summary> /// 将DataGridView控件中数据导出到Excel /// </summary> /// <param name="gridView">DataGridView对象</param> /// <param name="isShowExcle">是否显示Excel界面</param> /// <returns></returns> public bool ExportDataGridview(DataGridView gridView,bool isShowExcle) { if (gridView.Rows.Count == 0) return false; //建立Excel对象 Excel.Application excel = new Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = isShowExcle; //生成字段名称 for (int i = 0; i < gridView.ColumnCount; i++) { excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText; } //填充数据 for (int i = 0; i < gridView.RowCount-1; i++) { for (int j = 0; j < gridView.ColumnCount; j++) { if (gridView[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString(); } else { excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString(); } } } return true; } 然后调用此函数就行了!
用ADO直接去操作
'Dim TempApp As Application
'Dim Exwbook As Excel.Workbook
'Dim Exsheet As Excel.Worksheet
Dim TempApp As Object
Dim Exwbook As Object
Dim Exsheet As ObjectSet TempApp = CreateObject("Excel.application")
If TempApp Is Nothing Then MsgBox "请检查是否安装Microsoft Excell软件", vbExclamation, "问题": Exit Sub
Set Exwbook = TempApp.Workbooks.Add
Set Exsheet = Exwbook.Worksheets(1)
可以试试这个Koogra
myOleConn.Open();
string sql = "select [字段1] , [字段2] ,[字段3] from [sheet1$]";
OleDbDataAdapter MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, myOleConn);
DataSet ds = new System.Data.DataSet();
MyCommand.Fill(ds);
myOleConn.Close();
return ds.Tables[0];
/// <summary>
/// 将DataGridView控件中数据导出到Excel
/// </summary>
/// <param name="gridView">DataGridView对象</param>
/// <param name="isShowExcle">是否显示Excel界面</param>
/// <returns></returns>
public bool ExportDataGridview(DataGridView gridView,bool isShowExcle)
{
if (gridView.Rows.Count == 0)
return false;
//建立Excel对象
Excel.Application excel = new Excel.Application();
excel.Application.Workbooks.Add(true);
excel.Visible = isShowExcle;
//生成字段名称
for (int i = 0; i < gridView.ColumnCount; i++)
{
excel.Cells[1, i + 1] = gridView.Columns[i].HeaderText;
}
//填充数据
for (int i = 0; i < gridView.RowCount-1; i++)
{
for (int j = 0; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + gridView[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = gridView[j, i].Value.ToString();
}
}
}
return true;
}
然后调用此函数就行了!