今天有网友在QQ群中提问,用c1flexgrid控件,读取excel文件,出现乱码,如下图所示。
所使用的代码是:
- this.flxGrid.LoadExcel(@"c:\test_data.xlsx", FileFlags.AsDisplayed | FileFlags.IncludeFixedCells | FileFlags.IncludeMergedRanges);
复制代码
这个问题造成的原因是,原始的Excel文件中,乱码位置的文本,是富文本。
原则上可以在excel中,通过删除文本样式来解决,但这样对用户而言,使用成本过高,还是应该通过程序来解决。
之前的一个小程序中,处理过类似的问题,现贴出来供分享。
- _open_excel.Filter = "Excel 文件|*.xls;*.xlsx";
- _open_excel.FileName = "";
- if (_open_excel.ShowDialog() != DialogResult.OK)
- return;
- ClearAll();
- _excel.Load(_open_excel.FileName);
- if (_excel.Sheets.Count < 1) return;
- XLSheet sheet = _excel.Sheets[0];
- _fg1.Rows.Count = sheet.Rows.Count;
- _fg1.Cols.Count = sheet.Columns.Count + 1;
- for (int i = 0; i < sheet.Columns.Count; i++)
- {
- string cn = sheet[0, i].Value == null ? "" : sheet[0, i].Value.ToString();
- _fg1.Cols[i + 1].Name = cn;
- _fg1.Cols[i + 1].Caption = cn;
- _excel_col_name.Add(cn);
- }
- for (int i = 1; i < sheet.Rows.Count; i++)
- {
- _fg1[i, 0] = i;
- for (int j = 0; j < sheet.Columns.Count; j++)
- {
- object obj = sheet[i, j].Value;
- string value = "";
- if (obj != null)
- {
- if (typeof(string) == obj.GetType()) //如果单元格的类型是字符串,则有可能里面的内容是富文本形式,需要取Text的值。
- {
- value = sheet[i, j].Text;
- }
- else
- {
- value = obj.ToString();
- }
- }
- _fg1[i, j + 1] = value;
- }
- }
复制代码
代码中的变量类型说明:
_excel是c1excel
_fg1是c1flexgrid
_open_excel是OpenFileDialog
|