C#操作Excel(创建、打开、读写、保存)
在.NET开发中,不管是web程序还是桌面软件(尤其是涉及数据库操作的MIS系统等),常常需操作Excel,如读取Excel中数据到程序中,导出数据到Excel等。总结起来,其操作不外乎创建、打开、读写、保存(后退出/释放),而其操作方法,则主要有:通过ADO.NET数据连接方式、通过Excel对象模型“自动化”操作、使用中间数据格式如文本文件,XML等间接操作Excel、使用第三方控件(主要用于向Excel传输数据)等。
一.通过ADO.NET数据库连接方式
连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath +";Extended Properties=Excel 8.0;";
其中,filePath为要导入Excel的路径,可以自定义。
1.使用ADO.NET读取Excel中的数据填充到DataTable中,示例如下:
using System.Data.OleDb;
using System.Data;
public static DataSet LoadDataFromExcel(string filePath)
{
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +filePath+
";Extended Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
DataSet objDataset1 = new DataSet();
//将Excel中数据填充到数据集
objAdapter1.Fill(objDataset1, "XLData");
objConn.Close();
}
2.从DataTable中得到数据导入到Excel中
public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)
{
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
app.Visible = false;
Workbook wBook = app.Workbooks.Add(true);
Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
if (excelTable.Rows.Count > 0)
{
int row = excelTable.Rows.Count;
int col = excelTable.Columns.Count;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
wSheet.Cells[i + 2, j + 1] = excelTable.Rows[i][j].ToString();
}
}
}
int size = excelTable.Columns.Count;
//向Excel表中添加标题名称
for (int i = 0; i < size; i++)
{
wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;
}
//设置禁止弹出保存和覆盖的询问提示框
app.DisplayAlerts = false;
app.AlertBeforeOverwriting = false;
wBook.Save();
app.Save(filePath);
app.SaveWorkspace(filePath);
app.Quit();
app = null;
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
finally
{
}
}
直接使用ADO.NET向Excel表中添加数据
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=d:/test.xls;" +
"Extended Properties=Excel 8.0;";
OleDbConnection cn = new OleDbConnection(sConnectionString);
cn.Open();
OleDbCommand cmd = cn.CreateCommand();
cmd.CommandText="CREATE TABLE TestSheet ([ID] INTEGER,[Username] VarChar,[UserPwd] VarChar)";
//创建TestSheet工作表,且若没有Excel文件这根据连接字符串中的路径,自动创建一个Excel文件
cmd.ExecuteNonQuery();
//添加数据
cmd.CommandText = "INSERT INTO TestSheet VALUES(1,'elmer','password')";
cmd.ExecuteNonQuery();
cn.Close();
二.通过Excel对象模型的“自动化”操作
三.通过中间数据格式间接操作
四.使用第三方控件
浙公网安备 33010602011771号