找回密码
 立即注册

QQ登录

只需一步,快速开始

xxyping

论坛元老

2

主题

15

帖子

5190

积分

论坛元老

积分
5190

活字格认证

最新发帖
xxyping
论坛元老   /  发表于:2015-3-4 15:41  /   查看:19360  /  回复:27
再将多个Excel的Sheet里面的东西放在一个FpSpread中显示出来的时候,用SheetView打开Excel的时候出现错误,代码如下:

            Ledger_ReportTemplate_En _ReportTemplate_En = Ledger_ReportTemplate_En.GetReportTemplateEntity(ReportTemplateID);

            //FpSpread book = new FpSpread();
            SheetView v = new SheetView();
            v.SheetName = "sheet1";
            v.OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), 0);
            v.ColumnCount = _ReportTemplate_En.Cols;
            v.PageSize = _ReportTemplate_En.Rows;
            FpSpread_Report.Sheets.Add(v);

            SheetView v1 = new SheetView();
            v1.SheetName = "sheet2";
            v1.OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), 1);
            v1.ColumnCount = _ReportTemplate_En.Cols;
            v1.PageSize = _ReportTemplate_En.Rows;

            FpSpread_Report.Sheets.Add(v1);


不知道是不是哪里写错了,请指教!

27 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-3-4 18:48:00
沙发
回复 1楼xxyping的帖子

问题可能由以下两个原因引起的:
1.“未将对象引用设置到对象的实”表明 MemoryStream 可能为空或者其中没有内容,是否 debug 查看?
2.可能存在 Sheet 名称重复。添加之前是否清空?

  1.             this.FpSpread_Report.Sheets.Clear();
复制代码


另外,我通过代码查看您希望通过 Spread 加载统一 Excel 文件的多个 Sheet。如果是,可以直接通过 Spread 下的 OpenExcel 打开。无需通过 Sheet 单独打开。
回复 使用道具 举报
xxyping
论坛元老   /  发表于:2015-3-5 08:31:00
板凳
MemoryStream 不是为空的,我是先将excel的sheet保存到数据库,然后取值
采用这种方式打开是没有问题:
FpSpread_Report.Sheets[0].OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), _ReportTemplate_En.FileName);
FpSpread_Report.Sheets[0].ColumnCount = _ReportTemplate_En.Cols;
FpSpread_Report.Sheets[0].PageSize = _ReportTemplate_En.Rows;

但是我如果连续的加载第二个,用Sheet【1】是有问题的,超出范围,然后尝试给FpSpread_Report追加一个sheet后,再用FpSpread_Report.Sheets[1].OpenExcel,
可以使用,但是出来的结果是一个空的sheet,里面没内容,只有三个空白行
  SheetView v1 = new SheetView();
            v1.SheetName = "sheet2";
            v1.OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), _ReportTemplate_En.FileName + "1");
            v1.ColumnCount = _ReportTemplate_En.Cols;
            v1.PageSize = _ReportTemplate_En.Rows;
            FpSpread_Report.Sheets.Add(v1);
或者
          SheetView v1 = new SheetView();
            v1.SheetName = "sheet2";

            FpSpread_Report.Sheets.Add(v1);

            FpSpread_Report.Sheets[1].OpenExcel(new MemoryStream(_ReportTemplate_En.TemplateFile), _ReportTemplate_En.FileName + "1");
            FpSpread_Report.Sheets[1].ColumnCount = _ReportTemplate_En.Cols;
            FpSpread_Report.Sheets[1].PageSize = _ReportTemplate_En.Rows;


this.FpSpread_Report.Sheets.Clear();清空也不起作用的
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-5 14:37:00
地板
回复 3楼xxyping的帖子

我会尝试制作Demo重现这个问题,稍后反馈给您结果。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-5 15:41:00
5#
回复 3楼xxyping的帖子

附件是我重现问题的 demo,通过 FpSpread.OpenExcel 可以正确打开,通过 SheetView.OpenExcel 确实会出错。
错误信息:

  1. An exception of type 'System.ApplicationException' occurred in FarPoint.Web.Spread.dll but was not handled in user code

  2. Additional information: 打开文件错误
复制代码


和您的错误信息不同,所以为了精准确认问题,请在附件 Demo 基础上进行修改重现问题后发送给我,我将进一步调查。
15995_2.zip (15.96 KB, 下载次数: 1086)
回复 使用道具 举报
xxyping
论坛元老   /  发表于:2015-3-6 08:47:00
6#
你的这个附件,我这里下载后,打开有错误,版本不一致,用我当前的版本替换之后还是有问题,我就没有做修改

另外问题很简单,你只需要将test这个excel的所有sheet转为stream,然后尝试在同一个FpSpread中打开,看结果能否展示出来所有的test中的sheet,我这里尝试了好几种办法都不能实现
像我上面说的那样,追加sheet,然后用这个 FpSpread_Report.Sheets[1].去OPEN,结果出来的是空白的,而不是我OPen对应的那个sheet的内容
我这里会将我尝试的东西做一个demo,然后发出来
你可以尝试一下我上面说的那种功能可否实现
回复 使用道具 举报
xxyping
论坛元老   /  发表于:2015-3-6 09:20:00
7#
我已经将这个demo写好,请查看附件

SpreadTest.rar

501.97 KB, 下载次数: 1142

回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-6 14:23:00
8#
回复 7楼xxyping的帖子

感谢反馈,问题我已经重现接下来会反馈给产品组调查,收到进一步反馈后通知你。谢谢
回复 使用道具 举报
xxyping
论坛元老   /  发表于:2015-3-6 14:59:00
9#
麻烦尽快反馈,急用,谢谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-3-6 15:28:00
10#
回复 9楼xxyping的帖子

好的,有消息第一时间通知你。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部