怎么由DataSet将数据导入Excel?
2024-07-21 02:22:59
供稿:网友
 
/// <summary>
 /// 将dataset里所有数据导入excel.
 /// 需要添加com: microsoft excel object library.
 /// using excel;
 /// </summary>
 /// <param name="filepath"></param>
 /// <param name="ds"></param>
 public static void exporttoexcel(string filepath, dataset ds)
 {
 object omissing = system.reflection.missing.value;
 excel.applicationclass xlapp = new excel.applicationclass();
 try
 {
 // 打开excel文件。以下为office 2000.
 excel.workbook xlworkbook = xlapp.workbooks.open(filepath, omissing, omissing, omissing, omissing, omissing, 
 omissing, omissing, omissing, omissing, omissing, omissing,
 omissing);
 excel.worksheet xlworksheet;
 // 循环所有datatable
 for( int i=0; i<ds.tables.count; i++ )
 {
 // 添加入一个新的sheet页。
 xlworksheet = (excel.worksheet)xlworkbook.worksheets.add(omissing,omissing,1,omissing);
 // 以tablename作为新加的sheet页名。
 xlworksheet.name = ds.tables[i].tablename;
 // 取出这个datatable中的所有值,暂存于stringbuffer中。
 string stringbuffer = "";
 for( int j=0; j<ds.tables[i].rows.count; j++ )
 {
 for( int k=0; k<ds.tables[i].columns.count; k++ )
 {
 
 stringbuffer += ds.tables[i].rows[j][k].tostring();
 if( k < ds.tables[i].columns.count - 1 )
 stringbuffer += "/t";
 }
 stringbuffer += "/n";
 }
 // 利用系统剪切板
 system.windows.forms.clipboard.setdataobject("");
 // 将stringbuffer放入剪切板。
 system.windows.forms.clipboard.setdataobject(stringbuffer);
 // 选中这个sheet页中的第一个单元格
 ((excel.range)xlworksheet.cells[1,1]).select();
 // 粘贴!
 xlworksheet.paste(omissing,omissing);
 // 清空系统剪切板。
 system.windows.forms.clipboard.setdataobject("");
 }
 // 保存并关闭这个工作簿。
 xlworkbook.close( excel.xlsaveaction.xlsavechanges, omissing, omissing );
 system.runtime.interopservices.marshal.releasecomobject(xlworkbook);
 xlworkbook = null;
 }
 catch(exception ex)
 {
 messagebox.show(ex.message);
 }
 finally
 {
 // 释放...
 xlapp.quit();
 system.runtime.interopservices.marshal.releasecomobject(xlapp);
 xlapp = null;
 gc.collect();
 }
 }