找回密码
 立即注册

QQ登录

只需一步,快速开始

noahark

论坛元老

62

主题

173

帖子

7139

积分

论坛元老

积分
7139

活字格认证

noahark
论坛元老   /  发表于:2014-3-14 15:25  /   查看:10694  /  回复:8
版主你好,目前我需要把多个FpSpread导出到一个excel的多个sheet,我的代码如下:
System.IO.MemoryStream s = new System.IO.MemoryStream();
            fp_ProjectPlanIndex.SaveExcel(s, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet);
            s.Position = 0;
            FarPoint.Web.Spread.FpSpread fp = new FarPoint.Web.Spread.FpSpread();
            //fp.Sheets.Count = 5;
            FarPoint.Web.Spread.SheetView svProject = new SheetView();
            svProject.SheetName = "项目规划指标";
            fp.Sheets.Add(svProject);
            svProject.OpenExcel(s, 0);
            s.Close();

            s = new System.IO.MemoryStream();
            fp_ResidencePlanIndex.SaveExcel(s, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet);
            s.Position = 0;
            FarPoint.Web.Spread.SheetView svProduct = new SheetView();
            svProduct.SheetName = "产品规划指标";
            fp.Sheets.Add(svProduct);
            svProduct.OpenExcel(s, 0);
            s.Close();

导出后,有两个sheet,但第一个是没有名称的,第二个有名称,但没有数据,应该是使用的方法不对,请版主指点。

8 个回复

倒序浏览
roger.wang
社区贡献组   /  发表于:2014-3-14 15:48:00
沙发
回复 1楼noahark的帖子

能给个完整的demo吗?

从标题上看,您需要“多个FpSpread导出到一个excel的多个sheet ”,我理解的是:多个FpSpread,导出到同一个excel,的多个sheet 。

从代码片段看,用了MemoryStream 来实现多个FpSpread之间传递数据。
回复 使用道具 举报
noahark
论坛元老   /  发表于:2014-3-14 15:54:00
板凳
你的理解是对的,下面是完整的方法代码:
  /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btn_Export_Click(object sender, EventArgs e)
        {
            System.IO.MemoryStream s = new System.IO.MemoryStream();
            fp_ProjectPlanIndex.SaveExcel(s, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet);
            s.Position = 0;
            FarPoint.Web.Spread.FpSpread fp = new FarPoint.Web.Spread.FpSpread();
            //fp.Sheets.Count = 5;
            FarPoint.Web.Spread.SheetView svProject = new SheetView();
            svProject.SheetName = "项目规划指标";
            fp.Sheets.Add(svProject);
            svProject.OpenExcel(s, 0);
            s.Close();

            s = new System.IO.MemoryStream();
            fp_ResidencePlanIndex.SaveExcel(s, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet);
            s.Position = 0;
            FarPoint.Web.Spread.SheetView svProduct = new SheetView();
            svProduct.SheetName = "产品规划指标";
            fp.Sheets.Add(svProduct);
            svProduct.OpenExcel(s, 0);
            s.Close();

            fp.ActiveSheetView.Protect = false;  //设置导出来之后是否只读
            string fileName = Server.UrlEncode("历史规划信息" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
            fp.SaveExcelToResponse(fileName, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet);   
        }
回复 使用道具 举报
noahark
论坛元老   /  发表于:2014-3-14 17:07:00
地板
版主人还在不?这个问题比较急,能帮忙看下么?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-14 17:53:00
5#
回复 4楼noahark的帖子

╮(╯▽╰)╭,   2#的意思是要一个完整的可执行的demo工程,我直接在你基础上修改,不用造数据、建环境,这样速度得多快啊。

从您帖的代码看,通过MemoryStream 做桥梁,把Spread1数据保存为Excel,加载到Spead2上,再统一的导出为Excel, 您的思路是对的。
您测试过用一个一个Sheet页面“拷贝”,然后导出吗?  即不用Excel做中介,用各个Sheet页面的XML流。

  1. FpSpread1.Sheets[0].Save(MemoryStream)
  2. FpSpread2.Sheets[0].Open(MemoryStream)
复制代码
回复 使用道具 举报
noahark
论坛元老   /  发表于:2014-3-14 18:28:00
6#
能给个完整的方法么?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-17 09:40:00
7#
回复 6楼noahark的帖子

其实,5#的思路以及很清晰了 :l~jh:


  1.         private void button1导出多个_Click(object sender, EventArgs e)
  2.         {
  3.             System.IO.MemoryStream s = new System.IO.MemoryStream();
  4.             this.fpSpread1.Sheets[0].Save(s, false);

  5.             FpSpread fp = new FpSpread(); // this.fpSpread3;
  6.             fp.Reset();
  7.             fp.Sheets.Count = 2;
  8.             fp.Sheets[0] = new SheetView();
  9.             fp.Sheets[1] = new SheetView();
  10.             s.Position = 0;
  11.             fp.Sheets[0].Open(s);
  12.             fp.Sheets[0].SheetName = &quot;a&quot;;  //因为测试数据默认为Sheet1, 故需要修改名字
  13.             s.Close();

  14.             s = new System.IO.MemoryStream();
  15.             this.fpSpread2.Sheets[0].Save(s, false);
  16.             s.Position = 0;
  17.             fp.Sheets[1].Open(s);
  18.             s.Close();

  19.             fp.SaveExcel(@&quot;d:\test.xls&quot;);
  20.         }
复制代码
回复 使用道具 举报
noahark
论坛元老   /  发表于:2014-3-17 18:11:00
8#
谢谢,这个问题已经解决了,另外我想问下,farpoint有没有js 导出excel方法?
回复 使用道具 举报
roger.wang
社区贡献组   /  发表于:2014-3-18 08:56:00
9#
回复 8楼noahark的帖子

谢谢您的反馈, :g~ij:。

farpoint没有js 导出excel方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部