找回密码
 立即注册

QQ登录

只需一步,快速开始

octoberfour

注册会员

8

主题

22

帖子

80

积分

注册会员

积分
80

活字格认证微信认证勋章

octoberfour
注册会员   /  发表于:2022-2-25 18:32  /   查看:2927  /  回复:8
本帖最后由 octoberfour 于 2022-2-25 18:32 编辑

我用spread设计器设计出了一个文件当做模板使用。然后存储为一个xml文件。
现在想把这个xml文件读到spread控件的指定表单中,我有四个表单,其中第一个表单位已有数据,第二、第三、第四个表单将根据功能情况调用不同的模板。

第一种方式
                        String strPath = Application.StartupPath + "\\SheetTemplate\\101.地下水值班现场取数导入.xml";
                        FSQuery.Open(strPath);       //FSQuery是spread控件

这样能正常读取表单,但读后spread控件中就只剩这一个表单了,其它三个就不见了。

第二种方式
直接用表单名    QueryTwo.Open(strPath);  (第二个表单-sheetview被我命名为QueryTwo),读了没有什么异常,但控件数据没变化。

第三种方式      FSQuery.Sheets[2].Open(strPath);      (第二个表单的索引号是2,读了也是没有变化)

QQ图片20220225181152.png   
注:本想用spread生成xlsx后再读入,但发现保存xlsx后再读入xlsx里面放置的一个按钮控件就不在了。而xml还在的。


8 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-28 10:18:22
沙发
如果是要为每个Sheet分别来加载xml模板的话,方式就是FSQuery.Sheets.Open("xml模板文件名称")
你用的第二种和第三种方式效果是一样的

我不确定你说的“控件数据没变化”是什么意思,我这边如果重现问题?

回复 使用道具 举报
octoberfour
注册会员   /  发表于:2022-2-28 10:36:38
板凳
数据没变化,我用了这两个方法。没有加载成功,还是最原始的表格状态。
回复 使用道具 举报
octoberfour
注册会员   /  发表于:2022-2-28 10:49:57
地板
AA.png 我在正式版本的spread10中使用,什么也不能出现,还是原来最原始的表格。
在安装的spread15中使用(非正版试用状态),发现仍然不成功(但能够看到第一行的标题),红色框那行蓝色的。
我把这个表格发给你,你帮看一下。是表格设计的不合理,还是确实是控件的问题,或是我代码写法不正确的问题。谢谢。

101.地下水值班现场取数导入.rar (11.14 KB, 下载次数: 433)
回复 使用道具 举报
octoberfour
注册会员   /  发表于:2022-2-28 11:06:24
5#
                    FSQuery.Sheets.Clear();
                    FarPoint.Win.Spread.SheetView QueryFive = new FarPoint.Win.Spread.SheetView();

                    try
                    {
                        String strPath = Application.StartupPath + "\\SheetTemplate\\101.地下水值班现场取数导入.xml";
                        QueryFive.Open(strPath);                  //这两行也没作用。
                        FSQuery.Sheets.Add(QueryFive);
                        //FSQuery.Open(strPath);                 //这句就能正常打开,是用控件直接打开就没问题。只用表打开就有问题。
                    }
回复 使用道具 举报
octoberfour
注册会员   /  发表于:2022-2-28 11:24:06
6#
我终于弄明白了:
1、以前的那个表(虽然只有一个表),用的是spread设计器设计后并保存的,设计器保存时,将spread和这个表都保存在xml中。也就是说:这个xml文件既保存了spead的信息,也保存了这个表的信息。
2、我发现如果以spread来读取的话,就能成功,是因为spread能读取全部信息(包括这个表的信息)。
3、我只用sheetview来读取,就没法读取多余的信息(虽然里面有它能读到的信息,但因为含用不能读的,所以就全部都读不成功了)。
4、我后来在程序中先用spread读取全部信息,然后用sheetview只将表格信息存为xml文件,然后再用sheetview.read()、或者spread.sheets[0].read(),就能读成功了。

5,新问题来了,我怎么才能用spread设计器设计后,象程序里一样,只保存sheetview的信息为xml文件呢?这样程序就能正常读取了?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-28 12:33:09
7#
设计器没有办法保存sheet,只能保存spread对象,对于这种xml文件可以通过一个新的spread对象读取到以后,将需要的sheet副本设置到你的spread对象中

  1.             FpSpread fp = new FpSpread(LegacyBehaviors.None);
  2.             fp.Open(@"D:\Users\RICHARDMA\Downloads\123123123.xml");
  3.             fpSpread1.Sheets[1]=fp.Sheets[0].Clone();
复制代码
回复 使用道具 举报
octoberfour
注册会员   /  发表于:2022-2-28 17:26:20
8#
谢谢指导。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-28 17:33:36
9#
不用客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部