记录一个 C# 导出 Excel 的坑
Ø 简介
其实该文章并没有什么技术含量,只是记录下个人心得。在以后有朋友遇到类似问题,可以借鉴下,或者遇到相同问题时的提供个参考方向。
也算我的一个经历吧,这个问题我花了足足一天多的时间才找到问题,解决问题。因为刚开始进公司,对项目不怎么熟,所以有点慢!话不多说,上正题:
1. 相关描述
1) 项目导出 Excel 还是采用比较原始的方式,对,就是我们大名鼎鼎的 Microsoft.Office.Interop.Excel.dll 程序集,使用包括以下对象:
|
Microsoft.Office.Interop.Excel.Application |
|
Microsoft.Office.Interop.Excel.Workbook |
|
Microsoft.Office.Interop.Excel.Worksheet |
2) 问题描述
可以正常导出,但是打开 Excel 文件时:
1. 有些单元格有数据,但是显示为空白

2. 会显示“受保护的视图”的警告

2. 解决办法
1) 首先说第一个问题
进过一番调试,发现是因为该单元格的数据(也就是字符串)的字节长度大于 255 bytes 时,就会出现显示空白的情况。如果小于 255 个字节,则正常显示。
2) 然后,忽略第一个问题,尝试解决第二个问题“受保护的视图”的警告
1. 经过,在网上找了一些导出 Excel 的代码,各种尝试发现,原来网上的代码导出并不会出现以上问题;
2. 好,问题可以断定,是我们导出的代码出问题了,再经过一番“代码分段执行法”(我找问题的一个方法)或者“代码替换执行”,最后将问题指向了下面这行代码:
workbook.SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
这段代码没什么问题,主要是标红的这个参数。没错,就是这个参数导致了整个问题。
3. 以上这个参数表示导出为"Micorosoft Excel 5.0/95 工作薄(*.xls)" 格式的 Excel. 什么意思?其实我也不知道,应该是一个 Excel 内部版本号?
参考:https://www.cnblogs.com/mingjing/p/5955725.html
4. 该参数是一个枚举,后来了解到指定为 XlFileFormat.xlWorkbookNorma 即可,再次运行程序,导出 Excle, OK,没有了警告,长字符也正常显示了。

3. 友情提示
xls 表示适用于 Excel97-2003 的版本;
xlsx 则表示当前最新的工作簿后缀名,适用于 Excel2007及以上版本。
如果导出的 Excel 文件,在打开时报类似“格式不一致”的问题,则可以判断是否是因为文件后缀(如:*.xls)与导出时,代码中指定的格式是否一致?不一致时,就会引发该问题。
记录一个 C# 导出 Excel 的坑的更多相关文章
- 【NodeJs】记录一个阿里云redis的坑
背景 一个风和日丽的下午,一个上线的大好日子,以为一切准备好,上个线也就三五分钟的事.但是... 图样图森破. 背景是这样的,项目需要,在阿里云开通redis,在项目中配好redis的连接字符串后,以 ...
- 一个关于导出excel模板的实例
1 首先jsp页面 点击模板下载,会自动下载模板excel,效果如下 让我们看源码: 1 jsp页面 <div class="tab-pane" id="profi ...
- 写一个通用的List集合导出excel的通用方法
前几天要做一个数据导出Excel 我就打算写一个通用的. 这样一来用的时候也方便,数据主要是通过Orm取的List.这样写一个通用的刚好. public static void ListToExcel ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- 数据导出Excel,动态列
今天碰到一个需求,要求将用户回答的问卷及问题导出Excel表格,问卷对应的问题数量不一致,需要动态添加列表头,简单记录. 要导出Excel需要添加poi.jar包 用户-问卷实体(固定列): pack ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- .net实现一个简单的通用查询数据、导出Excel的网页
背景:临时提供一个简单的网页,供其他人浏览数据库(Oracel.MSSQL)的某些数据,并导出Excel.支持在配置文件中随时添加或修改sql. 实现:把sql语句等信息保存一个xml文件中,前端页面 ...
随机推荐
- fastjson的值过滤器ValueFilter
https://blog.csdn.net/linyifan_/article/details/83060408 原创林天乐 发布于2018-10-15 16:20:25 阅读数 1462 收藏 展 ...
- python3之猜数字游戏
猜数字小游戏 # coding:utf-8 import random #利用random生成一个1-10的随机数 luckeyNum = random.randint(1,10) #限定猜的次数 l ...
- JS是解释型还是编译型语言?
解释型和编译型语言 解释型语言 解释型语言是对代码进行一句一句的直接运行,在程序运行期间,使用解释器动态将代码解释为机器码,再运行. 编译型语言 编译型语言是需要使用编译器先对代码进行编译为机器码,再 ...
- spark的wordcount
在开发环境下实现第一个程序wordcount 1.下载和配置scala,注意不要下载2.13,在spark-core明确支持scala2.13前,使用2.12或者2.11比较好. https://ww ...
- TypeScript 学习笔记(三)
类: 1.TypeScript 是面向对象的 JavaScript,类描述了创建的对象共同的属性和方法 2.类通过关键字 class 声明,使用 extends 关键字进行继承 3.在引用一个类成员时 ...
- Mysql Join-连接查询(中)
Mysql Join-连接查询(中) 认识 就我平时的数据接触来看, 连接查询也没有很复杂,不够是非常需要耐心和逻辑的, 一点点将数据查出来, 拼接等. 没有什么技巧, 多练习就会了. 无非就是表之间 ...
- 编译安装 proxychains-ng proxychains4
下载 [root@localhost html]# git clone https://github.com/rofl0r/proxychains-ng.git 编译安装 [root@localhos ...
- [Go] gocron源码阅读-通过第三方cli包实现命令行参数获取和管理
gocron源码中使用的是下面这个第三方包来实现的,下面就单独的拿出来测试以下效果,和官方flag包差不多 go get github.com/urfave/cli package main impo ...
- 2、mongoDB的基本操作
数据写入和查询: show dbs (查看有哪些数据库) use imooc (使用数据库) db.dropDatabase() 删除数据库 备注:在use的时候如果use一个不存在的表,在mongo ...
- Windows下的命令行终端 cmder
Windows下有很多比系统自带的cmd或者PowerShell好用的命令行工具,cmder是最为推荐的一款. 1.从cmder官网直接下载,一般下载full版本,下载完成后解压文件到自己指定的目录, ...