Excel: xls与xlsx格式转换排坑指南

前言

总结一下在把Excel 5.0/95 的XLS转换为Excel 2007的XLSX新格式遇到的问题。

数据类型匹配

XLS文件里的单元格是General类型,但在XLSX里,是有针对具体的列设置数据类型的,这使得在操作database时,有可能造成数据类型不一致的错误:

复制代码
string type = string.Empty;
if (!dict.TryGetValue(field, out type))
{
    return "TEXT";
}

switch (type.ToUpper())
{
    case "C":
    case "L": // Bit(Logic) treat as Text
        return "TEXT";

    case "I":
        return "INTEGER";

    case "B":
    case "F":
    case "N":
    case "Y":
        return "DOUBLE";

    case "D":
    case "T":
        return "DATETIME";

    default:
        return "TEXT";
}

再者就是对于空串和Null,似乎xls认为没有什么差异,但xlsx读取出来,倘若单元格没有内容,""和DB.Null是有差异的:

复制代码
if (cellValue == DBNull.Value || cellValue == null)
{
  if ((sheetName.Equals("sheet1", StringComparison.OrdinalIgnoreCase) || sheetName.Equals("sheet2", StringComparison.OrdinalIgnoreCase)) &&
      (columnName.Equals("date_from", StringComparison.OrdinalIgnoreCase) || columnName.Equals("date_to", StringComparison.OrdinalIgnoreCase)))
  {
      values += "'" + new string(' ', 16) + "',";
  }
  else
  {
      values += "NULL,";
  }

  continue;

}

内容多行时处理不同

但单元格内容有多行时,xls认为换行是:CR+LF,xlsx则只有LF, 此时需要一个正则,来识别和修正这个换行:

复制代码
case "TEXT":
    string escaped = Regex.Replace(cellValue.ToString().Replace("'", "''"), @"(?<!\r)\n", "\r\n");
    values += "'" + escaped + "',";
    break;

default值

在xls中,如果每个column都有设置过数据类型,不是default的General,此时修改该column的某一行,如果不匹配,xls将有个角标显示警告,数据类型不符合预期,xls认为这是人为的一个失误。读取时,可能会被强制成default的值。

但如果事先设置了值,再设置数据类型,虽然不匹配,xls将无视这个警告,xls会当做是有意为之。

复制代码
int: 0;
doouble: 0.0;
bool: string;
DateTime: string;

最大行数

xls支持的最大行数:大约是65K,65535行。 但是,当编辑其中内容再次保存时,可能只剩18K,在某些版本(Excel 5.0)会丢失一部分数据。

xlsx支持的最大行数:大约是10,000K, 1048576行。这时候就无法另存为xls格式,数据将丢失绝大部分。

相关推荐
程序猿乐锅19 小时前
【苍穹外卖 Day12| Excel 入门】
excel
用户298698530141 天前
Python 数据处理:XML 与 Excel 互转的实用指南
后端·python·excel
xiaopai9452 天前
采购系统和Excel表格区别:钢结构项目物资管理的真实较量
excel·建米软件·采购系统
协享科技2 天前
2026 年 AI 表格工具怎么选:ChatGPT、原生 Copilot/Gemini 与公式助手
人工智能·chatgpt·excel·copilot
用户298698530142 天前
前端实战:在 React 中使用 JavaScript 一键导出 Excel 图表与形状为图片
javascript·react.js·excel
Q一件事2 天前
arcpy实现分区统计到一张excel中
excel
AI刀刀2 天前
deepseek 内容粘贴后符号丢失怎么办?AI 导出鸭实测解决排版乱码问题
android·人工智能·excel·ai导出鸭
圣光SG3 天前
Excel 函数大全
算法·excel
小小的木头人4 天前
Python 批量解析 Excel 经纬度,调用高德地图 API 获取中文地址
开发语言·python·excel
观远数据4 天前
从离线开发到实时同步:DataFlow如何支撑企业级数据治理闭环
java·windows·microsoft·excel