找回密码
 立即注册

QQ登录

只需一步,快速开始

handk

社区贡献组

9

主题

53

帖子

252

积分

社区贡献组

积分
252

活字格认证微信认证勋章

handk
社区贡献组   /  发表于:2016-6-15 15:51  /   查看:6481  /  回复:1
今天有网友在QQ群中提问,用c1flexgrid控件,读取excel文件,出现乱码,如下图所示。


所使用的代码是:
  1. this.flxGrid.LoadExcel(@"c:\test_data.xlsx", FileFlags.AsDisplayed | FileFlags.IncludeFixedCells | FileFlags.IncludeMergedRanges);
复制代码


这个问题造成的原因是,原始的Excel文件中,乱码位置的文本,是富文本。
原则上可以在excel中,通过删除文本样式来解决,但这样对用户而言,使用成本过高,还是应该通过程序来解决。

之前的一个小程序中,处理过类似的问题,现贴出来供分享。

  1. _open_excel.Filter = "Excel 文件|*.xls;*.xlsx";
  2.                 _open_excel.FileName = "";
  3.                 if (_open_excel.ShowDialog() != DialogResult.OK)
  4.                     return;
  5.                 ClearAll();
  6.                 _excel.Load(_open_excel.FileName);


  7.                 if (_excel.Sheets.Count < 1) return;
  8.                 XLSheet sheet = _excel.Sheets[0];

  9.                 _fg1.Rows.Count = sheet.Rows.Count;
  10.                 _fg1.Cols.Count = sheet.Columns.Count + 1;
  11.                 for (int i = 0; i < sheet.Columns.Count; i++)
  12.                 {
  13.                     string cn = sheet[0, i].Value == null ? "" : sheet[0, i].Value.ToString();
  14.                     _fg1.Cols[i + 1].Name = cn;
  15.                     _fg1.Cols[i + 1].Caption = cn;
  16.                     _excel_col_name.Add(cn);
  17.                 }

  18.                 for (int i = 1; i < sheet.Rows.Count; i++)
  19.                 {
  20.                     _fg1[i, 0] = i;
  21.                     for (int j = 0; j < sheet.Columns.Count; j++)
  22.                     {
  23.                         object obj = sheet[i, j].Value;
  24.                         string value = "";
  25.                         if (obj != null)
  26.                         {
  27.                             if (typeof(string) == obj.GetType())  //如果单元格的类型是字符串,则有可能里面的内容是富文本形式,需要取Text的值。
  28.                             {
  29.                                 value = sheet[i, j].Text;
  30.                             }
  31.                             else
  32.                             {
  33.                                 value = obj.ToString();
  34.                             }
  35.                         }
  36.                         _fg1[i, j + 1] = value;
  37.                     }
  38.                 }
复制代码


代码中的变量类型说明:
_excel是c1excel
_fg1是c1flexgrid
_open_excel是OpenFileDialog

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +1000 收起 理由
gw0506 + 1000 分享实战经验,送1000金币!!!

查看全部评分

1 个回复

倒序浏览
gw0506
超级版主   /  发表于:2016-6-15 15:58:57
沙发
感谢分享!
实战经验~ 获益匪浅!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部