采用OLEDB数据库方式向指定的Excel添加数据,怪像!
我们都知道,对Excel进行操作,其实方法是多种多样的,例如采用Office.Interop;例如采用ASPCell;例如采用NPOI;再例如采用数据库连接的方式OLEDB,etc.
还是先说说背景吧。背景是公司项目中,有一个大模块,以前采用的是Office.Interop,但是在自动化机子上面由于Office没有安装或者没有激活的情况,那么就会出现一些列的错误信息。提示的信息也是底层的什么COM......方正就是说明你的电脑上面没有安装Office或者没有激活Office,这样导致自动化机子经常报错。那么测试人员就不高兴了,人家就说,其他模块也有导入导出,也是操作Excel呀,为什么就这块出现问题呢。需要我定位查看。我通过查看代码,问题跟踪....一些常规的排查,发现我负责的模块导入导出采用的是Office.Interop组件(维护以前的代码),为什么不采用其他的控件呢?可能公司对其他插件的安全或者其他方面着想,没有使用像NPOI等类库。再者,其他模块都是采用的OLEDB,而且听说我负责这个模块相当的坑爹,我需要将所有的采用了Office.Interop的地方都使用OLEDB替换。
链接Office2003
Microsoft.Jet.OLEDB.4.0 ; Data Source =filePath;Extended Properties=Excel 8.0
链接Office2007+
Microsoft.Ace.OleDb.12.0;data source=filePath;Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'
参数这些我都不说了,大家基本上都知道的,像什么增删改查,我都不一一举例了,我们模块中都是采用末班文件,导出文件,就是将模板文件拷贝到指定目录下面,再将数据插入到相应的文件中。
我们模板文件中有很多个Sheet,其中有一个Sheet只有个字段,在导出*.xls(Office2003)的时候,发现一个问题,那就是在单表单列的时候数据是从第三行开始插入的。
using (OleDbConnection conn = new OleDbConnection(connstr))
{
conn.Open();
OleDbCommand cmd = conn.CreateCommand();
for (int i = 0; i < data.Length; i++)
{
builder.Append("?,");
if (cmd.Parameters.Count <= i)
{
OleDbParameter para = cmd.CreateParameter();
para.OleDbType = OleDbType.VarChar;
cmd.Parameters.Add(para);
}
cmd.Parameters[i].Value = data[i] ?? string.Empty;
}
cmd.CommandText = string.Format("INSERT INTO [{0}$] VALUES ({1})", sheetName, builder.ToString().Trim(','));
cmd.ExecuteNonQuery();
}
在对一个表只有一列的时候出现了一下的结果。
出现这样的情况,想请园子里面的高手看看,是否是我哪里操作不对,因为在导出*.xlsx的时候是不会出现这样的情况。而且这样的情况在*.xls中单表单列的时候出现。
麻烦各位了!!
采用OLEDB数据库方式向指定的Excel添加数据,怪像!的更多相关文章
- PowerDesigner创建表 拷贝创建表语句 SQLSERVER创建数据库 使用查询 创建表 并且添加数据
PowerDesigner创建表 : 1.双击打开PowerDesigner 2.双击打开Create model 3左键点击Model types,再点击Physical Data m ...
- SAP SMARTFORMS-基于内存方式在report程序中传递数据到smartforms显示
一.准备工作 1.新建include程序 1> include程序名字:ZDD_INC_0104 2> ZDD_INC_0104 程序中的内容为 2.使用T-CODE :SE11新建两个 ...
- 向ACCESS数据库中的表导入EXCEL表,在 System.Data.OleDb.OleDbException 中第一次偶然出现的“System.Data.dll”类型的异常
向ACCESS数据库中的表导入EXCEL表,EXCEL表Sheet1中与ACCESS数据库表中的关键字对应的列的值,不能与数据库中表的主键项值重复,不然就会出现 在 System.Data.OleDb ...
- Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限
目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...
- (2)OLEDB数据库操作
1.首先要引入 System.Data.OracleClient.dll 2.引入命名空间 using System.Data.OleDb; OleDb类 https://msdn.microsof ...
- 向MySql数据库导入excel表数据
最近要开发一个小的答题系统,如果题目人工录入那确实很麻烦.所以想到是不是可以从用一些现有数据格式的文件导入数据.在网上查了一下,看到有关于将excel的数据导入到mysql的方法.所以将题库数据整理成 ...
- 将Excel中数据导入数据库(一)
在工作中经常要将Excel中数据导入数据库,这里介绍一种方法. 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: Excel中数据导入数据库帮助类如下: using System; ...
- springMVC(5)---导入excel文件数据到数据库
springMVC(5)---导入excel文件数据到数据库 上一篇文章写了从数据库导出数据到excel文件,这篇文章悄悄相反,写的是导入excel文件数据到数据库.上一篇链接:springMVC(4 ...
- 数据在内存中的存储方式( Big Endian和Little Endian的区别 )(x86系列则采用little endian方式存储数据)
https://www.cnblogs.com/renyuan/archive/2013/05/26/3099766.html 1.故事的起源 “endian”这个词出自<格列佛游记>.小 ...
随机推荐
- 更新Debian软件源
更新Debian软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak #备份一下软件源 sudo vi /etc/apt/source ...
- ie6兼容问题汇总
这几天在查找和解决网页在ie6下的兼容性问题花了我不少的时间,参考了网上的一些解决方法和自己做出来比较有效果的给大家参考一下,也方便我日后再用到: 1.IE的cache设置为Every visit t ...
- Spring Boot中的注解
文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...
- Leetcode 详解(valid plindrome)
Question: Given a string, determine if it is a palindrome, considering only alphanumeric characters ...
- json转类
JavaScriptSerializer js = new JavaScriptSerializer();T detaile = js.Deserialize<T>(json);
- 1171. Lost in Space
http://acm.timus.ru/problem.aspx?space=1&num=1171 一天的时间,WA了N遍,居然是因为数组开小了呀,我勒个去!鄙视自己...... 我是从第 1 ...
- jQuery判断网页中的id是否有重复的
From:http://blog.csdn.net/china_skag/article/details/6915323判断网页中的ID是否有重复的:指定ID判断 $(function(){ $(&q ...
- c# 反射应用之工厂
反射是.net的核心功能,十分的强大.但是好像微软封装的太过了,作为程序员,在实际项目中我很少用到反射(估计是参加的大型项目太少了,需要交互第三方的项目太少了). 工厂模式是软件设计模式中重要的一种, ...
- eclipse 启动失败(找不到jvm)
今天启动eclipse时提示了一个错误 在网上找到的解决方法是在eclipse的快捷方式中加入Java的JVM的路径,方法如下: 右键eclipse快捷方式 ->属性 在目标中 如果只有 D: ...
- CSS-position详解
position属性 position属性可以调整DOM元素在浏览器中的位置,能够很好的体现HTML普通流这个特征.重点在于应用了不同的position值之后是否有脱离普通流和改变Display属性这 ...