怎么由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();
}
}