无OFFICE datatable导出csv表格(execl格式)(附NPOI,MyXls 方法)

来源:互联网 发布:数据库脑裂 编辑:程序博客网 时间:2024/06/06 09:35

还是当初毕业设计的用的东西,正好翻出来了,在这里记下来。

当时有一个导出execl的功能,网上找了大多都是利用Office接口之类的解决方法,但无奈电脑没有安装Office,只有一个WPS系列(不得不说,WPS还是蛮好用的,没有Office那么臃肿,也不用四处找破解,功能方面,反正我用足够了),那时候也不知道NPOI之类的东西,后来网上找了半天,搞出个这么个东西,虽然很不完善,倒也满足了当时的需求


    private void button1_Click(object sender, EventArgs e)    {           DataTable dt = (DataTable)dgSeaResult.DataSource;            SaveFileDialog save = new SaveFileDialog();            //设置文件类型            save.Filter = "全部文件(*.*)|*.*|表格文件(*.csv)|*.csv";            //设置默认文件类型显示顺序            save.FilterIndex = 2;            //保存对话框是否记忆上次打开的目录            save.RestoreDirectory = true;            if (save.ShowDialog() ==DialogResult.OK)            {                string strPath = save.FileName.ToString();//保存到指定目录下                if (File.Exists(strPath))                {                    File.Delete(strPath);                }                //先打印标头                StringBuilder strColu = new StringBuilder();                StringBuilder strValue = new StringBuilder();                int i = 0;                try                {                    StreamWriter sw = new StreamWriter(new FileStream(strPath, FileMode.CreateNew), Encoding.GetEncoding("GB2312"));                    for (i = 0; i <= dt.Columns.Count - 1; i++)                    {                        strColu.Append(dt.Columns[i].ColumnName);                        strColu.Append(",");                    }                    strColu.Remove(strColu.Length - 1, 1);//移出掉最后一个,字符                    sw.WriteLine(strColu);                    foreach (DataRow dr in dt.Rows)                    {                        strValue.Remove(0, strValue.Length);//移出                        for (i = 0; i <= dt.Columns.Count - 1; i++)                        {                            strValue.Append(dr[i].ToString());                            strValue.Append(",");                        }                        strValue.Remove(strValue.Length - 1, 1);//移出掉最后一个,字符                        sw.WriteLine(strValue);                    }                    sw.Close();                }                catch (Exception ex)                {                    MessageBox.Show(ex.Message);                }                System.Diagnostics.Process.Start(strPath);            }      }

下面附上现在很流行的 NPOI MyXls 的导出方法,同样不需要OFFICE支持,以下为转载内容:

/// MyXls简单Demo,快速入门代码/// </summary>/// <param name="dtSource"></param>/// <param name="strFileName"></param>/// <remarks>MyXls认为Excel的第一个单元格是:(1,1)</remarks>/// <Author>柳永法 http://www.yongfa365.com/ 2010-5-8 22:21:41</Author>public static void ExportEasy(DataTable dtSource,  string strFileName){    XlsDocument xls = new XlsDocument();    Worksheet sheet = xls.Workbook.Worksheets.Add("Sheet1");    //填充表头    foreach (DataColumn col in dtSource.Columns)    {        sheet.Cells.Add(1, col.Ordinal + 1, col.ColumnName);    }    //填充内容    for (int i = 0; i < dtSource.Rows.Count; i++)    {        for (int j = 0; j < dtSource.Columns.Count; j++)        {            sheet.Cells.Add(i + 2, j + 1, dtSource.Rows[i][j].ToString());        }    }    //保存    xls.FileName = strFileName;    xls.Save();}
/// NPOI简单Demo,快速入门代码/// </summary>/// <param name="dtSource"></param>/// <param name="strFileName"></param>/// <remarks>NPOI认为Excel的第一个单元格是:(0,0)</remarks>/// <Author>柳永法 http://www.yongfa365.com/ 2010-5-8 22:21:41</Author>public static void ExportEasy(DataTable dtSource, string strFileName){    HSSFWorkbook workbook = new HSSFWorkbook();    HSSFSheet sheet = workbook.CreateSheet();    //填充表头    HSSFRow dataRow = sheet.CreateRow(0);    foreach (DataColumn column in dtSource.Columns)    {        dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);    }    //填充内容    for (int i = 0; i < dtSource.Rows.Count; i++)    {        dataRow = sheet.CreateRow(i + 1);        for (int j = 0; j < dtSource.Columns.Count; j++)        {            dataRow.CreateCell(j).SetCellValue(dtSource.Rows[i][j].ToString());        }    }    //保存    using (MemoryStream ms = new MemoryStream())    {        using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))        {            workbook.Write(fs);        }    }    workbook.Dispose();}

  NPOI开源地址:http://npoi.codeplex.com/
  NPOI中文文档:http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html

  MyXls开源地址:http://sourceforge.net/projects/myxls/


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 博士拟录取没导师怎么办 保研联系导师后怎么办 特别害怕和导师交流怎么办 面试工资要少了怎么办 一面工资要低了怎么办 家乐卡到期本金还一半怎么办 新三板公司没有资不抵债没钱怎么办 户户通智能卡坏了怎么办 秦岭云无法回看怎么办 身份证在火车站丢了怎么办 到火车站发现身份证丢了怎么办 广电宽带太慢了怎么办 车有后雷达想装前置雷达怎么办 现代朗动油耗大怎么办 雷达线雕头里有水怎么办 上古卷轴5免疫死亡奴役怎么办 dw手表时针不动了怎么办 雷达陶瓷表壳摔坏了怎么办 雷达表盘摔坏了怎么办 雷达测速60超了怎么办 卡西欧手表电池没电了怎么办 审稿人让引用他的文章怎么办 考二建未从事该行业满两年怎么办 2档换3档离合器怎么办 高铁车票丢了怎么办 事业编制调动原单位不同意怎么办 想去铁路上工作怎么办 房产权50年以后怎么办 在香港手机没电怎么办 学校官网登陆忘记密码怎么办 网上申报学校忘记密码怎么办 专转本想换专业怎么办 发生工伤没有平均公资怎么办? 单招过了不想去怎么办 22岁了还想复读怎么办 父母不让我读大专了怎么办 专升本考试失利怎么办 高考复读一年后失败了怎么办? 医保住院超过30万怎么办 北京医保超过2万怎么办 工伤公司垫付医疗费没法报销怎么办