前言

总结一下在把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格式,数据将丢失绝大部分。

Excel: xls与xlsx格式转换排坑指南的更多相关文章

  1. C# 将DataGridView中显示的数据导出到Excel(.xls和.xlsx格式)—NPOI

    前言 https://blog.csdn.net/IT_xiao_guang_guang/article/details/104217491  本地数据库表中有46785条数据,测试正常  初次运行程 ...

  2. C# EXCEL(.xls和.xlsx)导入到数据库

    C# EXCEL(.xls和.xlsx)导入到数据库  转(http://www.cnblogs.com/bart-cai/articles/2716555.html) 原理:1.判断是否是Excel ...

  3. C# 操作 Excel(.xls和.xlsx)文件

    C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...

  4. python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)

    # python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...

  5. POI操作Excel详解,读取xls和xlsx格式的文件

    package org.ian.webutil;   import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  6. 1、关于python第三方工具操作xls和xlsx格式的excel文档选型的吐血经历

    首先,最近看了python的一本书,其中第7章是关于文章操作的,就计划把python操作excel,word,txt,xml,html,json等格式的文档做个总结,并实现一些功能,但是,第一步就要把 ...

  7. java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)

    package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...

  8. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  9. R语言学习——R读取txt、csv、xls和xlsx格式文件

    最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...

  10. NPOI导入xls,xlsx格式实例

    NPOI DLL下载地:http://npoi.codeplex.com/releases using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; us ...

随机推荐

  1. RocketMQ高级使用

    消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储. 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的消费者, ...

  2. 纯前端实现图片伪3D视差效果

    作者:vivo 互联网前端团队- Su Ning 本文通过depth-anything获取图片的深度图,同时基于pixi.js,通过着色器编程,实现了通过深度图驱动的伪3D效果.该方案支持鼠标/手势与 ...

  3. 对比分析LinkedBlockingQueue和SynchronousQueue

    缘起 最近在 review 同事代码时,看到其使用了org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 来构建线程池,而没 ...

  4. linux系统qcow2镜像的制作

    一.简单说明 PS: 最近有客户需要在云平台上部署我们的产品,好久没有做过qcow2镜像了,这里还是把制作流程记录下来. QCOW2镜像格式是Qemu支持的磁盘镜像格式之一.它可以使用一个文件来表示一 ...

  5. 使用wxWidgets进行跨平台GUI开发(附1)

    补充说明wxWidgets在Windows下使用CMake的配置 wxWidgets官方提供了一个在Windows下使用CMake来构建wxWidgets库的方法,这样便于你自己用CMake构建项目. ...

  6. php链式调用

    我们经常在项目中会写到 Mode::find()->where()->orderBy()->limit(); 链式调用,那么它是怎么实现的呢? 昨天看韩天峰大佬的视频,学到了 关键点 ...

  7. 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?

    原文链接:三分钟走进袋鼠云一站式全自动化全生命周期运维管家ChengYing(承影) 课件获取:关注公众号 ** "数栈研习社",后台私信 "ChengYing" ...

  8. UFT 对文件的处理(scripting.filesystemObject)

    1. 文件路劲 2. 文件大小 3.写 4. 读 5. 复制 6. 内容替换

  9. Chiplet封装技术的应用现状

    这是IC男奋斗史的第39篇原创 本文1651字,预计阅读4分钟. 接上文:Chiplet解决芯片技术发展瓶颈 Chiplet封装的产品介绍 以下介绍几款国内外使用Chiplet封装技术的代表产品,包括 ...

  10. 传统.NET 4.x应用容器化体验(6)

    在Windows Container中,没有写日志的情况下,如何排查系统的异常信息? 1 关于Windows事件日志 在以往基于IIS部署ASP.NET应用程序时,如果没有写指定日志的情况下,我们往往 ...