找回密码
 立即注册

QQ登录

只需一步,快速开始

wandu

注册会员

6

主题

34

帖子

188

积分

注册会员

积分
188
wandu
注册会员   /  发表于:2016-7-1 17:03  /   查看:7005  /  回复:11
  如图,8.png是excel打开的和10.jpg 是控件打开的,文字突出了;16.jpg是文字没换行,还是麻烦帮我看下有什么办法可以解决的
8.png
10.jpg
16.jpg

11 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-1 17:14:45
沙发
可否发一个可以重现问题的Excel模板,你可以将敏感数据替换掉。
回复 使用道具 举报
wandu
注册会员   /  发表于:2016-7-5 10:05:16
板凳
dexteryao 发表于 2016-7-1 17:14
可否发一个可以重现问题的Excel模板,你可以将敏感数据替换掉。

附件是有问题的excel,一个是文字突出了,一个是不换行,对比我上面的发的截图看下,麻烦了

1-梁的强度计算.xlsx

17.71 KB, 下载次数: 380

突出的excel

3-楔键.xlsx

15.88 KB, 下载次数: 380

不换行的excel

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-5 10:39:45
地板
1. 是因为您设置了居中,文字长度大于单元格长度后,会往两边同时溢出(如果一边又内容就不溢出了)。导入后可能字体稍微有所改变,您可以把excel 模板的宽度放宽一点就好了。
2. 没有重现出来。我这里导入后是换行的。您再试下。
回复 使用道具 举报
wandu
注册会员   /  发表于:2016-7-8 10:35:30
5#
dexteryao 发表于 2016-7-5 10:39
1. 是因为您设置了居中,文字长度大于单元格长度后,会往两边同时溢出(如果一边又内容就不溢出了)。导入 ...

第2点,我是重新赋值的,比如  fpSpread1.Sheets[0].Cells[item.Cells].Value = rtb.Rtf;像这样赋值,因为不支持上下标,我就重新设置上下标后再赋值给单元格;
但是造成了不能自动换行,所以我想问下,你们有换行的属性吗?Range对象有个WrapText属性可以自动换行
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-8 10:53:42
6#
您好 ,单元格的CellType 是有 WordWrap属性的。 你可以设置为true

            EditBaseCellType celltype = fpSpread1.ActiveSheet.Cells[8, 5].CellType as EditBaseCellType;
            celltype.WordWrap = true
回复 使用道具 举报
wandu
注册会员   /  发表于:2016-7-8 11:25:00
7#
dexteryao 发表于 2016-7-8 10:53
您好 ,单元格的CellType 是有 WordWrap属性的。 你可以设置为true

            EditBaseCellType cellt ...

没效果;
我觉得应该是fpSpread1.ActiveSheet.Cells[8, 5]这个对象后面应该有WordWrap属性的,而不是EditBaseCellType这个对象
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-8 11:29:16
8#
你发个完整点的代码吧。我这里试着调试下。EditBaseCellType只是个示例,具体您可以根据您实际的CellType设置。这个属性放到CellType里,所有同样CellType的单元格就可以同一显示了,不用每个单元格单独设置。
回复 使用道具 举报
wandu
注册会员   /  发表于:2016-7-8 11:40:44
9#
dexteryao 发表于 2016-7-8 11:29
你发个完整点的代码吧。我这里试着调试下。EditBaseCellType只是个示例,具体您可以根据您实际的CellType设 ...

说明:List<SheetInfo>这个对象可以理解为需要重新赋值的单元格集合,麻烦帮忙看看

  1.    /// <summary>
  2.         /// 解析公式上下标
  3.         /// </summary>
  4.         /// <param name="list"></param>
  5.         private void changeExcel(List<SheetInfo> list)
  6.         {
  7.             foreach (SheetInfo item in list)
  8.             {
  9.             
  10.                 if (item.Type == SheetEnum.上下标.ToString())//解析公式上下标
  11.                 {
  12.                     Font ft = fpSpread1.Sheets[0].Cells[item.Cells].Font;
  13.                     Color fc =  fpSpread1.Sheets[0].Cells[item.Cells].ForeColor;
  14.                     RichTextBox rtb = changeRichText(item.Value, ft,fc);
  15.                     fpSpread1.Sheets[0].Cells[item.Cells].Renderer = new FarPoint.Win.Spread.CellType.RichTextCellType();
  16.                     fpSpread1.Sheets[0].Cells[item.Cells].Value = rtb.Rtf;
  17.                     fpSpread1.Sheets[0].Cells[item.Cells].Row.Height = fpSpread1.Sheets[0].Cells[item.Cells].Row.Height + 10;
  18.                      EditBaseCellType celltype = fpSpread1.ActiveSheet.Cells[8, 5].CellType as EditBaseCellType;//当然此处cells的坐标我不仅仅只试了8、5,试过好多了,主要试了上下标所在的单元格
  19.                      celltype.WordWrap = true;
  20.                     //break;
  21.                 }
  22.             }

  23.         }
  24.         /// <summary>
  25.         /// 解析公式上下标
  26.         /// value : J=mt<u>2<u>/4π<u>2<u>i<u>2<u>     J=mv<d>m<d><u>2<u>/ω<d>0<d><u>2<u>
  27.         /// </summary>
  28.         /// <returns></returns>
  29.         private RichTextBox changeRichText(string value, Font ft, Color fc)
  30.         {
  31.             RichTextBox rtb = new RichTextBox();
  32.             rtb.Font = ft;
  33.             rtb.ForeColor = fc;
  34.             Font ftsmall = new Font(ft.FontFamily,ft.Size/2);
  35.             string[] info_u = Regex.Split(value, "<u>", RegexOptions.IgnoreCase);//value.Split(new char[3]{'<','u','>'});
  36.             for (int i = 0; i < info_u.Length; i=i+2)
  37.             {
  38.                 string[] info_d = Regex.Split(info_u[i], "<d>", RegexOptions.IgnoreCase); //info_u[i].Split(new char[3] { '<', 'd', '>' });
  39.                 for (int j = 0; j < info_d.Length; j = j + 2)
  40.                 {
  41.                    // rtb.Font = ft;
  42.                     rtb.SelectionCharOffset = 0;
  43.                     rtb.SelectedText = info_d[j];
  44.                     if (j + 1 < info_d.Length)
  45.                     {
  46.                        //rtb.Font = ftsmall;
  47.                         rtb.SelectionCharOffset = 0 - RichDeep;
  48.                         rtb.SelectedText = info_d[j + 1];
  49.                         
  50.                     }

  51.                 }

  52.                 if (i + 1 < info_u.Length)
  53.                 {
  54.                     //rtb.Font = ftsmall;
  55.                     rtb.SelectionCharOffset = RichDeep;
  56.                     rtb.SelectedText = info_u[i + 1];
  57.                 }

  58.             }
  59.             rtb.WordWrap = true;
  60.             return rtb;
  61.         }
复制代码
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2016-7-8 14:02:30
10#
您好 您设置CellType时候就设置好 WordWrap
            var celltype  =   new FarPoint.Win.Spread.CellType.RichTextCellType();

            celltype.WordWrap = true;
            fpSpread1.Sheets[0].Cells[8, 4].CellType = celltype;
            fpSpread1.Sheets[0].Cells[8,4].Value = rtb.Rtf;
            fpSpread1.Sheets[0].Cells[8,4].Row.Height = fpSpread1.Sheets[0].Cells[8,4].Row.Height + 10;


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