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格式,数据将丢失绝大部分。

相关推荐
AC赳赳老秦2 小时前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
VBAMatrix20 小时前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
AI英德西牛仔1 天前
手机文心怎么导出文档?AI 导出鸭一键解决格式崩塌与批量归档难题
人工智能·智能手机·excel·deepseek·ai导出鸭
AI导出鸭1 天前
Grok苹果版导出表格的工程化解耦方案:AI导出鸭的技术逻辑与批量实践
人工智能·excel·ai导出鸭
reasonsummer2 天前
【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)
开发语言·python·excel
qq83443102 天前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
开开心心就好2 天前
免费压缩软件WinRAR无弹窗、广告干扰
java·开发语言·前端·数据库·python·excel·winrar
AI导出鸭3 天前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
xiaopai9454 天前
工程项目管理系统选型:WPS/Excel为何难以替代专业系统的数据关联逻辑
excel·wps·项目管理系统·建米软件
灵析表格4 天前
Excel连接MySQL的函数化革命:灵析表格MySQL函数族业务应用分析
数据库·mysql·adb·excel·wps·灵析表格·excel公式盒子