找回密码
 立即注册

QQ登录

只需一步,快速开始

dhc7440

注册会员

2

主题

5

帖子

31

积分

注册会员

积分
31
最新发帖
dhc7440
注册会员   /  发表于:2024-3-18 11:28  /   查看:659  /  回复:7
1金币
本帖最后由 dhc7440 于 2024-3-20 18:25 编辑

spread过滤后,使用FpSpread.SaveExcel导出后的Excel中被过滤的数据是通过高度调成0来做的。
在office的Excel中加过滤后,下拉列表中看不到被过滤的内容。

有什么办法能看到被过滤的内容,或者是FpSpread导出excel的时候通过什么设置让被过滤的数据不导出在excel中么(ExcelSaveFlags.SaveAsViewed或者SaveAsFiltered都是高度调成0的)

7 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-18 18:17:03
沙发
你可以尝试克隆一份spread出来

删掉过滤行,然后去导出这个克隆的workbook

  1.             var temp=new FarPoint.Win.Spread.FpSpread();
  2.             MemoryStream ms = new MemoryStream();
  3.             fpSpread1.Save(ms, false);
  4.             temp.Open(ms);
  5.             //删除temp中的隐藏行
  6.             //
  7.             temp.SaveExcel
复制代码
回复 使用道具 举报
dhc7440
注册会员   /  发表于:2024-3-19 14:26:10
板凳
SheetView sheetView = this.fpSpread1.ActiveSheet;
            sheetView.RowCount = 100;
            sheetView.ColumnCount = 4;
            sheetView.ColumnHeader.RowCount = 1;
            sheetView.ColumnHeader.Cells[0, 0].Text = "A";
            sheetView.ColumnHeader.Cells[0, 1].Text = "B";
            sheetView.ColumnHeader.Cells[0, 2].Text = "C";

            for (int i = 0; i < 100; i++)
            {
                if (i > 1)
                {
                    sheetView.Cells[i, 0].Text = Convert.ToString(Math.Floor(Convert.ToDecimal(i - 2) / 4) * 4);
                    sheetView.Cells[i, 1].Text = Convert.ToString(i * 11);
                    sheetView.Cells[i, 2].Text = Convert.ToString(i * 12);
                    sheetView.Cells[i, 3].Text = Convert.ToString(i * 13);
                }
            }

            FpSpread temp = new FpSpread();
            MemoryStream ms = new MemoryStream();
            this.fpSpread1.Save(ms, false);
            temp.Open(ms);

上面的代码到temp.Open(ms);的时候就会报下面的错误
System.Xml.XmlException:Root Element Missing
环境是VS2022,.NetFramework4.8, spread.net 16
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-19 17:57:42
地板
这个其实是memorystream 的指针位置的问题了

你可以在open前先写一个
  1. ms.Seek(0, SeekOrigin.Begin);
复制代码



或者直接这样写
  1. fpSpread1.Open(new MemoryStream(ms.ToArray()));
复制代码
回复 使用道具 举报
波波虎
注册会员   /  发表于:2024-3-20 17:36:42
5#
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-20 18:17:50
6#
回复 使用道具 举报
dhc7440
注册会员   /  发表于:2024-3-20 18:24:45
7#
问题已解决,多谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-3-21 15:49:08
8#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部