考试系统--导出Dataset的数据到Excel的不同sheet中

          NdataTable中的记录想要全部导出到一个excel的不同sheet可以用什么方法.首先将datatable放进dataset,然后导出datasetexcel.

         首先介绍核心的导出到Excel的代码.

          首先要用该方法,要导入

using System.Data;
using Excel = Microsoft.Office.Interop.Excel;(就这么导入),

           如果导入

usingMicrosoft.Office.Interop.Excel;

           那么虽然他的写法会简单些,

Application excel = new Application();//现在写法
//Excel.Application excel = new Excel.Application();//原来写法

          但是他会报这个错,我们用的DataTable引用不明确,因为Excel中也有这个DataTable.


            方法的具体代码,我给添了一些注释方便我理解.

#region根据dataset创建Excel       
public boolCreatExcelBySet(string strFileName, DataSet ds)
{
    try
    {
//实例化Excel应用程序,为了验证机器中是否存在Excel程序
Excel.Applicationexcel = new Excel.Application();
//声明工作簿,.xls文件
Excel.WorkbookNowbook;
//判断服务器未安装Excel应用程序
if(excel == null)
{
    throw newException("服务器未安装Excel应用程序,此功能无法使用");
}
//SheetsInNewWorkbook,自动插入到新工作簿中的工作表的个数,即dataset中的table的个数
excel.SheetsInNewWorkbook= ds.Tables.Count;
//创建一个新的工作簿,赋给Newbook
Nowbook= excel.Workbooks.Add();
     
//循环ds的table,导入数据到nowbook的sheet中
for(int i = 1; i <= ds.Tables.Count; i++)
{
    DataTable dtCurrent = ds.Tables[i - 1];
    Nowbook.Sheets[i].Name =dtCurrent.TableName.ToString();
    //循环赋值datable的列数
    for (int j = 1; j <= dtCurrent.Columns.Count; j++)
    {
//一列一列的把数据从datatable中赋值到sheet中
Nowbook.Sheets[i].Cells[1,j] = dtCurrent.Columns[j - 1].ToString ();
for(int k = 1; k <= dtCurrent.Rows.Count; k++)
{
    Nowbook.Sheets[i].Cells[k + 1, j] =dtCurrent.Rows[k - 1][j-1].ToString ();
}
    }
   
}
保存方法1,提示文件替换。
//try
//{
//    //设置保存的文件名,以及保存的格式
//    Nowbook.SaveAs(Filename: strFileName,FileFormat: 56);
//}
//catch(Exception)
//{
//    Nowbook.Close(SaveChanges: false);
//    Nowbook = null;
//    excel.Quit();
//    excel = null;
//    return false;
//}
 
//Nowbook.Close(SaveChanges:false);
//Nowbook= null;
//excel.Quit();
//excel= null;
//保存方法2,这种保存方法不会提示是否有相同的文件,直接保存。
 
//另存excel文件,strFileName是个路径
//表示工作簿自上次保存以来是否进行了更改,false表示没有更改
Nowbook.Saved= false;
Nowbook.SaveCopyAs(strFileName);
    
//释放资源
Nowbook.Close(false,Type.Missing, Type.Missing);
Nowbook= null;
excel.Quit();
excel= null;
    }
    catch (Exception ex)
    {
 
throwex;
    }
 
    return true;
}
 
#endregion      

         如果要调用这个方法,那么需要参数,strFileName(路径),ds.对于dataset,如果直接是dataset就好了,直接用就可以.如果是datatable,那么就先将datatable放进dataset.

DataSet dataset =new DataSet();
//给表命名,并且将.copy()放到ds中,直接放dtResult会出现该表属于某个dataset的错,指向导出固定的几列
dtResult =dtResult.DefaultView.ToTable(false, new string[] { "列1","列2", "列3" });
//给表命名,不命名也会报错,而且表名会是导出的sheet的名
dtResult.TableName =strQuestionType;
//将整好的datable添加到ds中
dsExcel.Tables.Add(dtResult.Copy());

          然后就是路径了,由于导出Excel的方法,不能处理重名的问题,重名会自动覆盖.所以在strFileName,让它不会重名,最常见的就是加上用时间戳.但是名字中不能输入":"冒号,否则报错.


#region 导出到Excel中
DataTableToExcelexcel = new DataTableToExcel();

//导出的Excel存放的路径,加上时间戳,就不怕重复了
string filePath ="D:\\成绩分析" + DateTime.Now.ToString("yyyyMMddHHmmss") +".xls";
if(excel.CreatExcelBySet(filePath, dsExcel))
{
    MessageBox.Show(this, "请在" +filePath + "路径找到您导出的文件!");
}
else
{
    MessageBox.Show(this,"亲,不好意思,导出失败!");
}
#endregion

最后的结果就是这样的,先给个提示,然后去D盘找,该文件.


         导出的文件效果就是这样.


       至此,导出所有题型的功能就完成了.很简单,但是很实用.     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值