之前在做一个处理Access数据库软件的时候,应用了DataSet这个工具,从数据库里提取的信息直接通过SQL语句加载到DataSet里,在通过绑定数据源的方式,显示到UI界面的DataGridView中。但是同事反映了一个问题,就是数据量太大的时候不好编辑,不管是在Access还是我做的软件里,那么能否把数据导入到Excel进行编辑,然后再导入dataset供UI界面显示或者保存到Access中呢?、
这就是我做的软件。于是我百度找了相关资料,找到了2个函数。
private DataSet doImport(string strFileName) //从Excel导入到DataSet
{
if (strFileName=="") return null;
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + strFileName + ";" +
"Extended Properties=Excel 8.0;";
OleDbDataAdapter ExcelDA = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
DataSet ExcelDs = new DataSet();
try
{
ExcelDA.Fill(ExcelDs, "ExcelInfo");
}
catch(Exception err)
{
System.Console.WriteLine( err.ToString() );
}
return ExcelDs;
}
这个函数实现处理当前的Excel,然后返回一个DataSet。
private void doExport(DataSet ds,string strExcelFileName) //从DataSet导入到Excel
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
// Microsoft.Office.Interop.Excel.Workbook obj=new Microsoft.Office.Interop.Excel.WorkbookClass();
// obj.SaveAs("c:/zn.xls",Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795,null,null,false,false,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,null,null,null,null);
int rowIndex=1;
int colIndex=0;
excel.Application.Workbooks.Add(true);
System.Data.DataTable table = ds.Tables[0];
foreach(DataColumn col in table.Columns)
{
colIndex++;
excel.Cells[1,colIndex]=col.ColumnName;
}
foreach(DataRow row in table.Rows)
{
rowIndex++;
colIndex=0;
foreach(DataColumn col in table.Columns)
{
colIndex++;
excel.Cells[rowIndex,colIndex]=row[col.ColumnName].ToString();
}
}
excel.Visible=false;
excel.ActiveWorkbook.SaveAs(strExcelFileName , Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null);
//wkbNew.SaveAs strBookName
//excel.Save(strExcelFileName);
excel.Quit();
excel=null;
GC.Collect();//垃圾回收
}
这个函数实现新建一个Excel表,保存你指定的内存中的DataSet。
其实在 excel.ActiveWorkbook.SaveAs(strExcelFileName , Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null);
这行里面出现过一个问题,我把Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal参数更改了一下,就解决了。
这下当我需要大量数据编辑的时候,我就导出Excel表,方便多了!!