You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Syncfusion Xlsio读取Excel文本列时1,4被转为1.4的问题求助

解决方案:Syncfusion Xlsio v18 读取Excel文本列保留"1,4"原样

问题原因

Excel常规格式会自动将符合数字规则的字符串(比如"1,4",在部分区域设置中逗号被识别为小数分隔符)解析为数字;而"1,2,3"因无法被解析为有效数字,会保留文本格式。Syncfusion Xlsio默认遵循Excel的解析逻辑,导致"1,4"被转换为1.4。

方法1:打开Excel时禁用数字解析

通过ExcelOpenOptions配置不自动解析数字,强制所有内容按文本读取:

ExcelEngine excelEngine = new ExcelEngine();
IApplication excelApp = excelEngine.Excel;
excelApp.DefaultVersion = ExcelVersion.Excel2016;

// 配置打开选项,禁用数字自动解析
ExcelOpenOptions openOpts = new ExcelOpenOptions();
openOpts.ParseOptions.ParseNumbers = false;

// 打开目标工作簿
IWorkbook workbook = excelApp.Workbooks.Open(@"你的文件路径.xlsx", openOpts);
IWorksheet worksheet = workbook.Worksheets[0];

// 导出到DataTable
DataTable dataTable = worksheet.ExportDataTable(worksheet.UsedRange, ExcelExportDataTableOptions.ColumnNames);

// 后续处理逻辑
workbook.Close();
excelEngine.Dispose();

方法2:导出DataTable时指定列数据类型

如果仅需特定列保留文本格式,可通过ImportDataTableOptions明确指定对应列的类型为string:

ExcelEngine excelEngine = new ExcelEngine();
IApplication excelApp = excelEngine.Excel;
excelApp.DefaultVersion = ExcelVersion.Excel2016;

IWorkbook workbook = excelApp.Workbooks.Open(@"你的文件路径.xlsx");
IWorksheet worksheet = workbook.Worksheets[0];

// 创建导入配置选项
ImportDataTableOptions importOpts = new ImportDataTableOptions();
importOpts.StartRow = 1; // 表头所在行
importOpts.StartColumn = 1;
importOpts.EndRow = worksheet.UsedRange.LastRow;
importOpts.EndColumn = worksheet.UsedRange.LastColumn;

// 指定各列数据类型,示例中第2列(索引1)为目标文本列
// 其他列可根据实际需求设置类型,如typeof(int)、typeof(DateTime)等
importOpts.ColumnDataTypes = new Type[] { typeof(string), typeof(string), typeof(int) };

// 导出DataTable
DataTable dataTable = worksheet.ExportDataTable(importOpts);

// 后续处理逻辑
workbook.Close();
excelEngine.Dispose();

方法3:循环读取单元格文本

如果上述方法无效,直接遍历单元格读取Text属性(需配合方法1禁用数字解析,确保获取原始输入内容):

ExcelEngine excelEngine = new ExcelEngine();
IApplication excelApp = excelEngine.Excel;
excelApp.DefaultVersion = ExcelVersion.Excel2016;

IWorkbook workbook = excelApp.Workbooks.Open(@"你的文件路径.xlsx");
IWorksheet worksheet = workbook.Worksheets[0];

DataTable dataTable = new DataTable();
int lastCol = worksheet.UsedRange.LastColumn;
int lastRow = worksheet.UsedRange.LastRow;

// 添加表头
for (int col = 1; col <= lastCol; col++)
{
    dataTable.Columns.Add(worksheet.Cells[1, col].Text);
}

// 逐行读取数据
for (int row = 2; row <= lastRow; row++)
{
    DataRow dr = dataTable.NewRow();
    for (int col = 1; col <= lastCol; col++)
    {
        // 读取单元格显示文本,保留原始格式
        dr[col - 1] = worksheet.Cells[row, col].Text;
    }
    dataTable.Rows.Add(dr);
}

// 后续处理逻辑
workbook.Close();
excelEngine.Dispose();

注意:如果源Excel中"1,4"已被自动转换为数字(单元格格式为数字),仅读取Text属性会得到"1.4",此时必须使用方法1禁用数字解析,才能获取原始输入的"1,4"。

内容的提问来源于stack exchange,提问作者Argha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:01:20