using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;

namespace Cinway.Common
{
    public class xmlParam {
        public string totalcount { get; set; }
        public string startdt { get; set; }
        public string enddt { get; set; }
        public string xmlNum { get; set; }
        public string deptcode { get; set; }
        public string deptname { get; set; }
        public string  strstart { get; set; }
        public string jszhu { get; set; }
        public string jszhang { get; set; }
        public string commonstr { get; set; }
        public string filename { get; set; }//新增zp
    }
   public class ExcelToolNew
    {
        public FileStream ToExcel(DataSet ds,string headstr,string footstr,xmlParam pa) {
            DataTable dt = ds.Tables[0];
            int rowcount = dt.Rows.Count;
            int rcount = dt.Rows.Count / 60;
            DataSet dataset = SplitDataTable(dt, rcount);
            dt.Clear();
            string[] strfilename = new string[dataset.Tables.Count];
            ManualResetEvent[] doneEvents = new ManualResetEvent[dataset.Tables.Count];
            Fibonacci[] fibArray = new Fibonacci[dataset.Tables.Count];
            int i = 0;
            foreach (DataTable datatable in dataset.Tables)
            {
                string sfilename = "D:\\xmlfile\\" + Guid.NewGuid() + ".XML";
                strfilename[i] = sfilename;
                Fibonacci fi = new Fibonacci();
                fi.WriteXML(datatable, sfilename, pa.xmlNum,pa.strstart);
                i++;
            }
            string filename = "D:\\xmlfile\\" + Guid.NewGuid() + ".xml";
            StreamReader srh = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(headstr), Encoding.Default);//读出表头部内容
            FileStream fs1 = new FileStream(filename, FileMode.OpenOrCreate);
            StreamWriter sw1 = new StreamWriter(fs1, Encoding.UTF8);
            sw1.WriteLine(srh.ReadToEnd().Replace("totalcount", pa.totalcount).Replace("StartDT", pa.startdt).Replace("EndDT",pa.enddt).Replace("deptcode", pa.deptcode).Replace("deptname", pa.deptname).Replace("jszhang", pa.jszhang).Replace("jszhu", pa.jszhu).Replace("commonstr", pa.commonstr));//把头部内容写到新文件中
            for (int k = 0; k < strfilename.Length; k++)
            {
                StreamReader sr1 = new StreamReader(strfilename[k], Encoding.Default);
                sw1.Write(sr1.ReadToEnd());//插入数据
            }
            StreamReader srf = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(footstr), Encoding.Default);//读出表尾部内容
            sw1.WriteLine(srf.ReadToEnd());
            sw1.Close();
            fs1.Close();
            FileStream fsm = new FileStream(filename, FileMode.Open);
            return fsm;
        }
        public string ToExcelnew(DataSet ds, string headstr, string footstr, xmlParam pa)
        {
            DataTable dt = ds.Tables[0];
            int rowcount = dt.Rows.Count;
            int rcount = dt.Rows.Count / 60;
            DataSet dataset = SplitDataTable(dt, rcount);
            dt.Clear();
            string[] strfilename = new string[dataset.Tables.Count];
            ManualResetEvent[] doneEvents = new ManualResetEvent[dataset.Tables.Count];
            Fibonacci[] fibArray = new Fibonacci[dataset.Tables.Count];
            int i = 0;
            foreach (DataTable datatable in dataset.Tables)
            {
                string sfilename = "D:\\xmlfile\\" + Guid.NewGuid() + ".XML";
                strfilename[i] = sfilename;
                Fibonacci fi = new Fibonacci();
                fi.WriteXML(datatable, sfilename, pa.xmlNum, pa.strstart);
                i++;
            }
            string filename = "D:\\xmlfile\\" + Guid.NewGuid() + ".xml";
            StreamReader srh = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(headstr), Encoding.Default);//读出表头部内容
            FileStream fs1 = new FileStream(filename, FileMode.OpenOrCreate);
            StreamWriter sw1 = new StreamWriter(fs1, Encoding.UTF8);
            sw1.WriteLine(srh.ReadToEnd().Replace("totalcount", pa.totalcount).Replace("StartDT", pa.startdt).Replace("EndDT", pa.enddt).Replace("deptcode", pa.deptcode).Replace("deptname", pa.deptname).Replace("jszhang", pa.jszhang).Replace("jszhu", pa.jszhu).Replace("commonstr", pa.commonstr));//把头部内容写到新文件中
            for (int k = 0; k < strfilename.Length; k++)
            {
                StreamReader sr1 = new StreamReader(strfilename[k], Encoding.Default);
                sw1.Write(sr1.ReadToEnd());//插入数据
            }
            StreamReader srf = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(footstr), Encoding.Default);//读出表尾部内容
            sw1.WriteLine(srf.ReadToEnd());
            sw1.Close();
            fs1.Close();
            string strfileName = Common.SecurityEncrypt.ESCEncrypt(pa.filename, "20170421");
            string strfilePath = Common.SecurityEncrypt.ESCEncrypt(filename, "20170421");
           //FileStream fsm = new FileStream(filename, FileMode.Open);
            return "filename=" + strfileName + "&filepath=" + strfilePath;
        }
        // DateTime enddt = DateTime.Now;
        // FileStream fss = new FileStream("C:\\JISHI.TXT", FileMode.OpenOrCreate);
        // StreamWriter sws = new StreamWriter(fss, Encoding.UTF8);
        //sws.WriteLine(startdt.ToString() + "******" + enddt.ToString());
        // sws.Close();
        // fss.Close();
        /// <summary>
        /// 分解数据表
        /// </summary>
        /// <param name="originalTab">需要分解的表</param>
        /// <param name="rowsNum">每个表包含的数据量</param>
        /// <returns></returns>
        public DataSet SplitDataTable(DataTable originalTab, int rowsNum)
        {
            //获取所需创建的表数量
            if (rowsNum==0) {
                rowsNum = 1;
            }
            int tableNum = originalTab.Rows.Count / rowsNum;

//获取数据余数
            int remainder = originalTab.Rows.Count % rowsNum;

DataSet ds = new DataSet();

//如果只需要创建1个表,直接将原始表存入DataSet
            if (tableNum == 0)
            {
                if (originalTab.Rows.Count==0) {
                    ds.Tables.Add(new DataTable());
                }
                else
                {
                    ds.Tables.Add(originalTab);
                }
            }
            else
            {
                DataTable[] tableSlice = new DataTable[tableNum];

//Save orginal columns into new table.            
                for (int c = 0; c < tableNum; c++)
                {
                    tableSlice[c] = new DataTable();
                    foreach (DataColumn dc in originalTab.Columns)
                    {
                        tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType);
                    }
                }
                //Import Rows
                for (int i = 0; i < tableNum; i++)
                {
                    // if the current table is not the last one
                    if (i != tableNum - 1)
                    {
                        for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++)
                        {
                            tableSlice[i].ImportRow(originalTab.Rows[j]);
                        }
                    }
                    else
                    {
                        for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++)
                        {
                            tableSlice[i].ImportRow(originalTab.Rows[k]);
                        }
                    }
                }

//add all tables into a dataset                
                foreach (DataTable dt in tableSlice)
                {
                    ds.Tables.Add(dt);
                }
            }
            return ds;
        }
        public class Fibonacci
        {
            // ManualResetEvent _doneEvent;
            public void WriteXML(DataTable dt, string filename,string xmlNum,string strstart)
            {
                FileStream fs1 = new FileStream(filename, FileMode.OpenOrCreate);
                StreamWriter sw1 = new StreamWriter(fs1, Encoding.UTF8);
                sw1.WriteLine("");
                sw1.Close();
                fs1.Close();
                if (string.IsNullOrEmpty(strstart)) {
                    strstart = "<Cell ss:StyleID=\"" + xmlNum + "\"><Data ss:Type=\"String\">";
                }
                string strend = "</Data></Cell>";
                int jishu = 0;
                string xmlstr2 = "";
                foreach (DataRow row in dt.Rows)
                {
                    if (jishu == 10)
                    {
                        FileStream fs3 = new FileStream(filename, FileMode.Append);
                        StreamWriter sw3 = new StreamWriter(fs3, Encoding.UTF8);
                        sw3.WriteLine(xmlstr2);
                        sw3.Close();
                        fs3.Close();
                        xmlstr2 = "";
                        jishu = 0;
                    }
                    xmlstr2 += "<Row ss:AutoFitHeight=\"0\" ss:Height=\"18.9375\">";
                    for (int i = 0; i < row.ItemArray.Length; i++)
                    {
                        string str = row[i] == null ? "" : row[i].ToString();
                        if (str.Contains("<") || str.Contains(">"))
                        {
                            str = str.Replace('<', '<');
                            str = str.Replace('>', '>');
                        }
                        xmlstr2 += (strstart + str + strend);
                    }
                    xmlstr2 += "</Row>";
                    jishu++;
                }
                dt.Clear();
                FileStream fs2 = new FileStream(filename, FileMode.Append);
                StreamWriter sw2 = new StreamWriter(fs2, Encoding.UTF8);
                sw2.WriteLine(xmlstr2);
                sw2.Close();
                fs2.Close();
            }
        }
    }
}

xml方式将dataset导出excel的更多相关文章

  1. C# DataSet导出Excel

    //多个DataSet导出Excel文件 public static void DataSetToExcel(DataSet p_ds,string strSavePath) { ;//多个DataS ...

  2. 支持IE,FireFox,Chrome三大主流浏览器,通过js+Flash方式将table导出Excel文件

    今天在做项目的时候,遇到了前端下载Excel的功能,结果原先的代码,如下: function generate_excel(tableid) {        var table = document ...

  3. NPOI DataSet导出excel

    /// <summary> /// DataSet导出到Excel的MemoryStream /// </summary> /// <param name="d ...

  4. 170313、poi:采用自定义注解的方式导入、导出excel(这种方式比较好扩展)

    步骤一.自定义注解 步骤二.写Excel泛型工具类 步骤三.在需要导出excel的类属相上加上自定义注解,并设置 步骤四.写service,controller 步骤一:自定义注解 import ja ...

  5. DataSet导出Excel,比以往的方法导出的Excel外观更加好看

    原文发布时间为:2010-06-21 -- 来源于本人的百度文章 [由搬家工具导入] ======目前方法=========== #region 生成Excel/// <summary>/ ...

  6. form表单提交方式实现浏览器导出Excel

    刚开始使用ajax做Excel导出,发现ajax做不了浏览器导出只能下载到本地,于是用form提交可以提供浏览器下载Excel. 1>用ajax做本地下载: FileOutputStream f ...

  7. 【C#-导出Excel】DataSet导出Excel

    1.添加引用 2.封装方法 using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPO ...

  8. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)

    上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...

  9. [转] Asp.Net 导出 Excel 数据的9种方案

    湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...

随机推荐

  1. CentOS入门

    1.因修改/etc/sudoers权限导致sudo和su不能使用问题 https://blog.csdn.net/u014029448/article/details/80944380 2.给用户分配 ...

  2. 【原创】Linux基础之chkconfig systemd

    CentOS6服务用chkconfig控制,CentOS7改为systemd控制 1 systemd systemd is a suite of basic building blocks for a ...

  3. JUnit-三角形判断测试

    添加工具 1.添加JUnit测试工具: 使用eclipse自带的JUnit或者下载相关包.使用方式如下: 新建一个项目后,点击next出现以下界面: 选择添加JUnit 选择完成出现以下目录文件: p ...

  4. web页面乱码,JSP页面编码设置

    解决Web页面访问出现乱码bug,JSP页面首行添加: <%@ page language="java" contentType="text/html; chars ...

  5. 使用open live writer客户端写博客

    注:Windows Live Writer 已经停止更新,建议安装 Open Live Writer,下载地址: http://openlivewriter.org/ 使用open live writ ...

  6. 初识dubbo

    1. 为什么需要 Dubbo(摘自http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) 随着互联网的发展,网站应用的规模不断扩大,常规的垂 ...

  7. thymleaf模板截取日期的年月日,去掉时分秒

    简单描述:浏览同事提交的代码,发现他的日期回显中有一行代码,只截取到了年月日,记录一下 代码: //HTML代码 <span th:text="${#strings.substring ...

  8. mysql中有多种存储引擎,每种引擎都有自己的特色

    mysql中有多种存储引擎,每种引擎都有自己的特色. 用途: MyISAM:快读, Memory:内存数据, InnoDB:完整的事务支持 锁: MyISAM:全表锁定, Memory:全表锁定, I ...

  9. cf1132G 线段树解分区间LIS(一种全新的线段树解LIS思路)+单调栈

    /* 给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度 首先考虑给定n个数的数列的LIS求法:从左往右枚举第i点作为最大点的贡献, 那么往左找到第一个比a[i]大的数,设这个数 ...

  10. cf1110E 思维

    /* Ci'=Ci+1 + Ci-1 -Ci Ci+1 - Ci' = Ci - Ci-1 Ci' - Ci-1 = Ci+1 - Ci; 即求一次Ci’等价于交换Ci和Ci-1 与 Ci+1和Ci的 ...