xml方式将dataset导出excel
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的更多相关文章
- C# DataSet导出Excel
//多个DataSet导出Excel文件 public static void DataSetToExcel(DataSet p_ds,string strSavePath) { ;//多个DataS ...
- 支持IE,FireFox,Chrome三大主流浏览器,通过js+Flash方式将table导出Excel文件
今天在做项目的时候,遇到了前端下载Excel的功能,结果原先的代码,如下: function generate_excel(tableid) { var table = document ...
- NPOI DataSet导出excel
/// <summary> /// DataSet导出到Excel的MemoryStream /// </summary> /// <param name="d ...
- 170313、poi:采用自定义注解的方式导入、导出excel(这种方式比较好扩展)
步骤一.自定义注解 步骤二.写Excel泛型工具类 步骤三.在需要导出excel的类属相上加上自定义注解,并设置 步骤四.写service,controller 步骤一:自定义注解 import ja ...
- DataSet导出Excel,比以往的方法导出的Excel外观更加好看
原文发布时间为:2010-06-21 -- 来源于本人的百度文章 [由搬家工具导入] ======目前方法=========== #region 生成Excel/// <summary>/ ...
- form表单提交方式实现浏览器导出Excel
刚开始使用ajax做Excel导出,发现ajax做不了浏览器导出只能下载到本地,于是用form提交可以提供浏览器下载Excel. 1>用ajax做本地下载: FileOutputStream f ...
- 【C#-导出Excel】DataSet导出Excel
1.添加引用 2.封装方法 using System; using System.Data; using System.IO; using NPOI.HSSF.UserModel; using NPO ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续篇)
上周六我发表的文章<分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility>受到了大家的热烈支持与推荐,再此表示感谢,该ExcelUtility ...
- [转] Asp.Net 导出 Excel 数据的9种方案
湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...
随机推荐
- 【原创】大数据基础之Hive(5)hive on spark
hive 2.3.4 on spark 2.4.0 Hive on Spark provides Hive with the ability to utilize Apache Spark as it ...
- 洛谷P4707 重返现世 [DP,min-max容斥]
传送门 前置知识 做这题前,您需要认识这个式子: \[ kthmax(S)=\sum_{\varnothing\neq T\subseteq S}{|T|-1\choose k-1} (-1)^{|T ...
- vue.js的学习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- url加密和解密
.NET中加密和解密有两种方式 string file="文件上(传)篇.doc";string Server_UrlEncode=Server.UrlEncode(file);s ...
- Confluence 6 通过 SSL 或 HTTPS 运行 - 备注和问题解决
备注 在创建证书时候的背景信息: 'keytool -genkeypair' 命令将会创建秘钥对,包括公钥和关联的私钥,然后存储到 keystore 中.这个命令打包公钥为 X.509 v3 自签 ...
- Confluence 6 查看系统属性
当你添加了内存,设置了代理(proxy)或者修改了 Java 的选项,通常比较难判断系统是否已经按照你的修改进行了配置和启动.这个页面将会帮助你查看 Confluence 站点运行使用的系统属性. 你 ...
- Confluence 6 数据库表-内容(Content)
这部分的内容描述了有关 Confluence 存储内容所使用的表格.内容是用户在 Confluence 存储和分享的信息. attachmentdata 附件文件的二进制数据.当 Confluence ...
- laravel 多对多关联 attach detach sync
用户表和角色表,多对多关联,一个用户有多个角色,一个角色属于多个用户 添加多对多关联 attach: 给1号用户添加1号角色,并把关联表的column字段赋值为$value,后边的数组需要的时候再添加 ...
- 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置
top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...
- js--基础(对象、数组、函数、if语句、while语句、do while语句、continue语句、break语句)
三.流程控制:1.单行语句var age =20;//单行语句 2.复合语句花括号包含起来的与聚集和叫做复合语句,一对花括号表示一个复合语句 ,处理时可以当成一个单行语句来看待,一般复合句与叫做代码块 ...