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格式,数据将丢失绝大部分。
Excel: xls与xlsx格式转换排坑指南的更多相关文章
- C# 将DataGridView中显示的数据导出到Excel(.xls和.xlsx格式)—NPOI
前言 https://blog.csdn.net/IT_xiao_guang_guang/article/details/104217491 本地数据库表中有46785条数据,测试正常 初次运行程 ...
- C# EXCEL(.xls和.xlsx)导入到数据库
C# EXCEL(.xls和.xlsx)导入到数据库 转(http://www.cnblogs.com/bart-cai/articles/2716555.html) 原理:1.判断是否是Excel ...
- C# 操作 Excel(.xls和.xlsx)文件
C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...
- python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)
# python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...
- POI操作Excel详解,读取xls和xlsx格式的文件
package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- 1、关于python第三方工具操作xls和xlsx格式的excel文档选型的吐血经历
首先,最近看了python的一本书,其中第7章是关于文章操作的,就计划把python操作excel,word,txt,xml,html,json等格式的文档做个总结,并实现一些功能,但是,第一步就要把 ...
- java中poi解析excel(兼容07版本以上及以下:.xls和.xlsx格式)
package com.genersoft.cbms.ysbz.ExcelDr.cmd; import com.genersoft.cbms.ysbz.ExcelDr.dao.ExcelDrDao; ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- R语言学习——R读取txt、csv、xls和xlsx格式文件
最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...
- NPOI导入xls,xlsx格式实例
NPOI DLL下载地:http://npoi.codeplex.com/releases using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; us ...
随机推荐
- RocketMQ高级使用
消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储. 消息生成者发送消息 MQ收到消息,将消息进行持久化,在存储中新增一条记录 返回ACK给生产者 MQ push 消息给对应的消费者, ...
- 纯前端实现图片伪3D视差效果
作者:vivo 互联网前端团队- Su Ning 本文通过depth-anything获取图片的深度图,同时基于pixi.js,通过着色器编程,实现了通过深度图驱动的伪3D效果.该方案支持鼠标/手势与 ...
- 对比分析LinkedBlockingQueue和SynchronousQueue
缘起 最近在 review 同事代码时,看到其使用了org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 来构建线程池,而没 ...
- linux系统qcow2镜像的制作
一.简单说明 PS: 最近有客户需要在云平台上部署我们的产品,好久没有做过qcow2镜像了,这里还是把制作流程记录下来. QCOW2镜像格式是Qemu支持的磁盘镜像格式之一.它可以使用一个文件来表示一 ...
- 使用wxWidgets进行跨平台GUI开发(附1)
补充说明wxWidgets在Windows下使用CMake的配置 wxWidgets官方提供了一个在Windows下使用CMake来构建wxWidgets库的方法,这样便于你自己用CMake构建项目. ...
- php链式调用
我们经常在项目中会写到 Mode::find()->where()->orderBy()->limit(); 链式调用,那么它是怎么实现的呢? 昨天看韩天峰大佬的视频,学到了 关键点 ...
- 大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
原文链接:三分钟走进袋鼠云一站式全自动化全生命周期运维管家ChengYing(承影) 课件获取:关注公众号 ** "数栈研习社",后台私信 "ChengYing" ...
- UFT 对文件的处理(scripting.filesystemObject)
1. 文件路劲 2. 文件大小 3.写 4. 读 5. 复制 6. 内容替换
- Chiplet封装技术的应用现状
这是IC男奋斗史的第39篇原创 本文1651字,预计阅读4分钟. 接上文:Chiplet解决芯片技术发展瓶颈 Chiplet封装的产品介绍 以下介绍几款国内外使用Chiplet封装技术的代表产品,包括 ...
- 传统.NET 4.x应用容器化体验(6)
在Windows Container中,没有写日志的情况下,如何排查系统的异常信息? 1 关于Windows事件日志 在以往基于IIS部署ASP.NET应用程序时,如果没有写指定日志的情况下,我们往往 ...