110,556
社区成员
发帖
与我相关
我的任务
分享
private DataTable GetExcelData(string path, string sql)
{
OleDbConnection myConnection;
OleDbCommand myCommand;
string sqlString;
string connectionString;
DataSet dataSet = new DataSet();
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0";
sqlString = sql;
try
{
myConnection = new OleDbConnection(connectionString);
myCommand = new OleDbCommand(sqlString, myConnection);
myCommand.CommandType = CommandType.Text;
OleDbDataAdapter myAdapter = new OleDbDataAdapter(myCommand);
myConnection.Open();
myAdapter.Fill(dataSet, "Table");
myAdapter.Dispose();
myCommand.Dispose();
myConnection.Close();
myConnection.Dispose();
return dataSet.Tables[0];
}
catch (Exception E)
{
throw (E);
}
finally
{
}
}
private void ExcuteSql(string path, string sql)
{
OleDbConnection myConnection;
OleDbCommand myCommand;
string sqlString;
string connectionString;
DataSet dataSet = new DataSet();
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0";
sqlString = sql;
try
{
myConnection = new OleDbConnection(connectionString);
myCommand = new OleDbCommand(sqlString, myConnection);
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception E)
{
throw (E);
}
finally
{
}
}
private String[] GetExcelSheetNames(string path)
{
OleDbConnection objConn = null;
System.Data.DataTable dt = null;
try
{
String connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=Excel 8.0;";
objConn = new OleDbConnection(connString);
objConn.Open();
dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt == null)
{
return null;
}
String[] excelSheets = new String[dt.Rows.Count];
int i = 0;
foreach (DataRow row in dt.Rows)
{
excelSheets[i] = row["TABLE_NAME"].ToString();
i++;
}
return excelSheets;
}
catch (Exception ex)
{
return null;
}
finally
{
if (objConn != null)
{
objConn.Close();
objConn.Dispose();
}
if (dt != null)
{
dt.Dispose();
}
}
}
public void SaveTableListToExcel(List<System.Data.DataTable> table, string savepath)
{
try
{
Application xlApp = new Application();
xlApp.Visible = false;
xlApp.DisplayAlerts = false;
Microsoft.Office.Interop.Excel.Workbooks wbs = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook wb = wbs.Add(Missing.Value);
List<Microsoft.Office.Interop.Excel.Worksheet> ws = this.ToWorkSheetList(wb, table);
xlApp.DisplayAlerts = false;
xlApp.ActiveWorkbook.SaveCopyAs(savepath);
xlApp.Quit();
xlApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
catch (Exception ex)
{
throw ex;
}
}
//多个DataTable导入Excel
public List<Microsoft.Office.Interop.Excel.Worksheet> ToWorkSheetList(Microsoft.Office.Interop.Excel.Workbook wb, List<System.Data.DataTable> TabList)
{
int k = 0;
List<Microsoft.Office.Interop.Excel.Worksheet> WorksheetList = new List<Microsoft.Office.Interop.Excel.Worksheet>();
foreach (System.Data.DataTable table in TabList)
{
k++;
Microsoft.Office.Interop.Excel.Worksheet ret = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[k];
//ret.Name = table.TableName;
ret.Name = (table.TableName != String.Empty) ? table.TableName : "Sheets" + k + ""; //Name要特别注意 不能为Empty 和特殊符号,不能重复
Microsoft.Office.Interop.Excel.Range r = ret.get_Range(ret.Cells[1, 1], ret.Cells[1, table.Columns.Count]);
object[] header = new object[table.Columns.Count];
for (int i = 0; i < table.Columns.Count; i++)
{
header[i] = table.Columns[i].ToString();
}
r.Value2 = header;
if (table.Rows.Count > 0)
{
r = ret.get_Range("A2", Missing.Value);
object[,] objData = new Object[table.Rows.Count, table.Columns.Count];
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
objData[i, j] = table.Rows[i][j].ToString();
}
}
r = r.get_Resize(table.Rows.Count, table.Columns.Count);
r.Value2 = objData;
r.EntireColumn.AutoFit();
}
WorksheetList.Add(ret);
}
return WorksheetList;
}
Excel.Application myExcel=new Excel.Application();
myExcel.Visible=false;
myExcel.Workbooks.Add();
//第一行输出列名,dt是数据表
int col=0;
foreach(DataColumn dc in dt.Columns)
{
myExcel.Worksheets("sheet1").activate();//让sheet1成为当前工作表
myExcel.Cells(1,col).value=dc.ColumnName;
col+=1;
}
//第二行开始输出内容
for(col=0;col<dt.Columns.Count-1;col++)
{
for(int row=0;row<dt.Rows.Count-1;row++)
{
//Excel是从1开始编号的
meExcel.Cells(row+2,col+1).value=dt.Rows[row][col];
}
}
//...让sheet2称为当前工作表,继续添加数据,最后保存文件