找回密码
 立即注册

QQ登录

只需一步,快速开始

byf

注册会员

11

主题

43

帖子

130

积分

注册会员

积分
130
byf
注册会员   /  发表于:2018-4-2 16:55  /   查看:9525  /  回复:10
操作步骤如下:1。先导入excle,导入后设置单元格背景色 。2.再导出excle,导出后的excle丢失了设置的单元格背景色 image.png78823851.png
image.png737846984.png
image.png13142088.png
image.png357110289.png

10 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-4-2 17:42:59
沙发
可否提供下您设置背景色的代码,我这边好重现问题。
或者您可以使用一下代码先测试下。
'GcSpreadSheet1.SaveExcel("c:\zipfile\test.xlsx", GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX, GrapeCity.Windows.SpreadSheet.Data.ExcelSaveFlags.SaveAsViewed)
回复 使用道具 举报
byf
注册会员   /  发表于:2018-4-3 09:10:20
板凳
dexteryao 发表于 2018-4-2 17:42
可否提供下您设置背景色的代码,我这边好重现问题。
或者您可以使用一下代码先测试下。
'GcSpreadSheet1. ...

你好,GcSpreadSheet1.SaveExcel("c:\zipfile\test.xlsx", GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX, GrapeCity.Windows.SpreadSheet.Data.ExcelSaveFlags.SaveAsViewed)这个方法导出的excle是带有背景色但是我需要将格式数据保存到数据库,用这个方法保存到数据库的格式数据不可用,用gcSpreadSheet.SaveExcel(filePath, GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX);保存到数据库的格式再打开也是没有背景色的。现在主要问题是导入excle后设置单元格背景色保存后(格式保存到数据库)再打开无背景色。以下是设置背景色的代码:

        /// <summary>
        /// 设置活动单元格背景
        /// 【格式设置--切换背景色及填充颜色调用】
        /// </summary>
        /// <param name="_style"></param>
        public void SetActivityCellBackground(Color _color)
        {
            try
            {
                m_SpreadSheet.gcSpreadSheet1.AutoRefresh = false;
                m_SpreadSheet.gcSpreadSheet1.SuspendEvent();

                int rowIndex = 0;

                int columnIndex = 0;

                string address = string.Empty;

                // 循环单元格
                Cell cell = null;
               // List<GcSpreadCellInfo> gcList = new List<GcSpreadCellInfo>();
                foreach (CellRange cellRange in m_SpreadSheet.gcSpreadSheet1.ActiveSheet.Selections)
                {
                    CellRange range = GetActualRange(cellRange);
                    for (int i = 0; i < range.RowCount; i++)
                    {
                        for (int j = 0; j < range.ColumnCount; j++)
                        {
                            rowIndex = range.Row + i;

                            columnIndex = range.Column + j;
                            cell = m_SpreadSheet.gcSpreadSheet1.ActiveSheet[rowIndex, columnIndex];  
                            cell.Background = new SolidColorBrush(_color);
                            CustomCellTagObj _tagObj = new CustomCellTagObj();
                            _tagObj = cell.Tag == null ? null : (CustomCellTagObj)cell.Tag;
                            if (_tagObj == null)
                            {
                                _tagObj = new CustomCellTagObj();
                            }
                            _tagObj.CellBackGround = cell.ActualBackground;//cell.Background;
                            cell.Tag = _tagObj;
                        }
                    }
                }
                m_SpreadSheet.gcSpreadSheet1.ResumeEvent();
                m_SpreadSheet.gcSpreadSheet1.AutoRefresh = true;
            }
            catch (Exception ex)
            {
                throw new Exception("背景色设置失败!", ex);
            }
        }

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-4-3 09:35:08
地板
“我需要将格式数据保存到数据库,用这个方法保存到数据库的格式数据不可用” 您是通过什么方式获取和保存格式数据的。
SaveAsViewed 的作用是将单元格应用的实际样式导出到Excel保证Excel中看到的样式和spread展示一致。
因为spread的样式按照编程逻辑有个继承的概念,但是Excel并没有这个概念,所以有时导出会有不一致。
回复 使用道具 举报
byf
注册会员   /  发表于:2018-4-3 09:57:40
5#
dexteryao 发表于 2018-4-3 09:35
“我需要将格式数据保存到数据库,用这个方法保存到数据库的格式数据不可用” 您是通过什么方式获取和保存 ...

是将流数据通过 Importer对象转换为json数据保存的 image.png989939270.png image.png717030639.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-4-3 14:26:57
6#
您这里是用了SpreadJS ExcelIO 组件,让spread WPF生成的Excel 文件或者文件的内存流转换成了JSON,然后将json保存到数据,对吧?
那现在用SaveAsViewed 时候您说”保存到数据库的格式数据不可用”,这个不可用具体指什么,在导出json时报错,没有获取到json?
如果是这样的问题,请你提供下GcSpreadSheet1.SaveExcel("c:\zipfile\test.xlsx", GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX, GrapeCity.Windows.SpreadSheet.Data.ExcelSaveFlags.SaveAsViewed) 这一步操作所导出的excel,我用这个Excel 转为JSON测试是否报错。


还是保存的json无法还原出Excel?这种情况您提供下Eexcl文件和json,以及您ExcelIO组件的版本。


如果是其他情况请详细描述

回复 使用道具 举报
byf
注册会员   /  发表于:2018-4-3 15:47:30
7#
dexteryao 发表于 2018-4-3 14:26
您这里是用了SpreadJS ExcelIO 组件,让spread WPF生成的Excel 文件或者文件的内存流转换成了JSON,然后将j ...

非常感谢,解决了,用的GcSpreadSheet1.SaveExcel(stream, GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX, GrapeCity.Windows.SpreadSheet.Data.ExcelSaveFlags.SaveAsViewed),上午保存后再打开报错是我粗心造成的,但还有几处不太明白,为什么直接从数据库读取的数据设置背景颜色用GcSpreadSheet1.SaveExcel(stream, GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX)就能保存上颜色,而导入的excel设置颜色再用GcSpreadSheet1.SaveExcel(stream,GrapeCity.Windows.SpreadSheet.Data.ExcelFileFormat.XLSX)保存就保存不上颜色。还有就是导入excel(带有背景色的excel)取单元格Background取不到值,而取ActualBackground却能取到 image.png599987792.png
image.png302456053.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-4-3 17:36:14
8#
这个是由于Spread 在样式上和Excel有些差异。 Spread为了开发人员编程更加方便,有样式继承的概念,比如行列可以有自己的样式,单元格也可有样式,单元格的样式最高。所以如果单元格没有样式,但是行或者列有,那么Background没值但是 ActualBackground 有值,这个属性就是最终显示的样式。
SaveAsViewed的作用就是在导出Excel的时候将单元格实际样式导出,保证一致。
具体导入Excel样式丢失的问题要看excel内部样式如何设置了,这个情况就比较多了。
回复 使用道具 举报
byf
注册会员   /  发表于:2018-4-3 18:28:11
9#
dexteryao 发表于 2018-4-3 17:36
这个是由于Spread 在样式上和Excel有些差异。 Spread为了开发人员编程更加方便,有样式继承的概念,比如行 ...

谢谢。
回复 使用道具 举报
byf
注册会员   /  发表于:2018-4-3 18:28:14
10#
dexteryao 发表于 2018-4-3 17:36
这个是由于Spread 在样式上和Excel有些差异。 Spread为了开发人员编程更加方便,有样式继承的概念,比如行 ...

谢谢。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部