如何实现数据从delphi 保存excel导入excel中的居中排列

  中有一列数据是数字和文本方式混合排列的,在用ADO导入数据时就会出现部分数据不能导入的问题  解决这个问题 首先想到的是常用的数字转换为文本格式的方法 WorkSheet.Columns[1].NumberFormatLocal:='@';  几行一敲,测试发现没效果,就马上开始 baidu, 铺天盖地的搜索。。。  没怎么搜索就找到了excel 中有用分列方法将整列数据文本格式化的方法:数据-&分列-&列数据格式-&文本  录制下的宏代码如下:Sub Macro2()
    Columns(&D:D&).Select
    Selection.TextToColumns Destination:=Range(&D1&), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 2), TrailingMinusNumbers:=True
End Sub  接下来将VBA宏代码翻译成delphi代码:WorkSheet.Columns[4].S
WorkSheet.Selection.TextToColumns(WorkSheet.Cells[1,4],xlDelimited,xlDoubleQuote,False,True,False,False,False,False,Array(1, 2),True);  一才发现 Array(1,2) 语法错误,于是将其改成delphi 中的数组格式 Array[0..1] of Integer=(1,2) ,  编译还是报错,发现是因为是Delphi调用OLE自动化控制器操纵Excel,该方法只能出现OleVariant类型的参数,马上找资料看有没有OleVariant类型的数组,一下就找到了马上改了代码换上去:  var a:OleV
a:=VarArrayCreate([0,1],varInteger);
WorkSheet.Columns[4].S
WorkSheet.Selection.TextToColumns(WorkSheet.Cells[1,4],xlDelimited,xlDoubleQuote,False,True,False,False,False,False,a,True);  满以为这下问题应该解决了吧,编译通过,测试发现点都么反应,郁闷了。。。  到底是哪点的原因呢?开始排查问题中。。。  第一个可能的原因,excel 宏写错了?反复测试,都能正常运行,效果明显。  第二个可能的原因,delphi OLE操纵Excel 失效?测试了其他Ole代码,都能正常运行,没有问题。  现在就剩下一个比较确定的问题了,WorkSheet.Selection.TextToColumns 这个方法的问题。  中输入&delphi TextToColumns& 搜出来的结果寥寥可数,遇到这个问题的很少,提的问题大多都没人回答,  许多人甚至不知所云,千辛万苦找到MSDN中的帮助中有 C# 调用 excel 这个方法的示例,但是关键地方就是数组参数  他用空值代替了:public Object TextToColumns(
    Object Destination,
    XlTextParsingType DataType,
    XlTextQualifier TextQualifier,
    Object ConsecutiveDelimiter,
    Object Tab,
    Object Semicolon,
    Object Comma,
    Object Space,
    Object Other,
    Object OtherChar,
    Object FieldInfo,
    Object DecimalSeparator,
    Object ThousandsSeparator,
    Object TrailingMinusNumbers
private void ConvertTextToColumns()
    ..Tools.Excel.NamedRange namedRange1 =
        this.Controls.AddNamedRange(this.Range[&A1&, missing],
        &namedRange1&);
    namedRange1.Value2 = &01 01 2001&;
    Excel.Range destinationRange = this.Range[&A5&, missing];
    namedRange1.TextToColumns(destinationRange,
        Excel.XlTextParsingType.xlDelimited,
        Excel.XlTextQualifier.xlTextQualifierDoubleQuote, missing,
        missing, missing, missing, true, missing, missing, missing,
        missing, missing, missing);
}  反复的看帮助中对 FieldInfo 的描述:  FieldInfo   类型:..::.Object  一个数组,包含各个数据列的分析信息。解释取决于 DataType 的值。当对数据进行分隔时,此参数是一个由两数组组成的数组,每个两元素数组都指定特定列的转换选项。第一个元素是列号(从 1 开始),第二个元素是指定如何分析列的 XlColumnDataType 常数之一。  可以是下列 XlColumnDataType 值之一:  xlGeneralFormat  xlTextFormat  xlMDYFormat  xlDMYFormat  xlYMDFormat  xlMYDFormat  xlDYMFormat  xlYDMFormat  xlEMDFormat  xlSkipColumn  只有当安装并选择了台语支持时,才能使用 xlEMDFormat。xlEMDFormat 指定所使用的台语纪元日期。  列说明符可以采用任何顺序。如果对于输入数据中的特定列,给定的列说明符不存在,则用 xlGeneralFormat 设置对列进行分析。  如果源数据具有固定宽度的列,则每个两元素数组中的第一个元素都指定该列中的起始字符位置(以整数形式指定;0(零)是第一个字符)。两元素数组的第二个元素将该列的分析选项指定为从 1 至 9 的数字,如上面列出的那样。  还是不明所以。。。接下来就是漫长的碰运气时间。。。。  改不同的参数运行测试,反复N次,每次都是失望的结果。就这样被这个问题折磨了3天多的时间,我绝望了,很想放弃,因为我至少找到了数据导入出现空行的原因和解决方法,只是不能用实现,每次导入数据前人工操作excel将数据格式化也不是太麻烦。但在花了这么多时间和精力后我能放得下吗?就这样心甘情愿的认输?对自己说,我做不到?不!一定能行,我还没有失败,相反已经成功了一半了,剩下的那一半只是时间和灵感问题,这时候放弃了才是真的失败了。稍微放松下,暂时什么都不想,等会一定把你搞定 。打几盘魔兽先  这一刻终于来临,一段代码突然给我带来了灵感,我是不是应该把参数类型带进去?虽然资料和帮助都没提到,但是语法上应该是没问题的,说做就做:var a:OleV
a:=VarArrayCreate([0,1],varInteger);
WorkSheet.Columns[4].S
WorkSheet.Columns[4].TextToColumns(WorkSheet.Cells[1,4],DataType:=xlDelimited,TextQualifier:=xlDoubleQuote,FieldInfo:=a);  运行,测试,通过 !!!喔耶,完美解决,perfect ! 怎一个爽字了得。。。哈哈哈哈哈哈  也需要不抛弃,不放弃,还有一点点灵感。我能!无所不能!大家都在搜:
扫描二维码安装搜房网房天下APP
手机浏览器访问搜房网房天下
> > 问题详情
delphi中如何向已存在的EXCEL文件中插入数据
delphi中如何向已存在的EXCEL文件中插入数据,在不打开EXCEL文件的情况下可以插入数据吗?如果方便就给出主要代码。谢谢!!
浏览次数:0
回答被采纳后将共获得20
小伙伴们还在答题的路上,先看看下面这些内容吧~
居住模式的变迁,往往是整个城市和经济变化的缩影。随着人们生活水平的提高,购房者对居住品质的要求也日益提升,一些有着完善配套,良好教育文化氛围,健全管理等综合优势的项目也成为了人们购房的首选。 土地资源的日渐稀缺,使得城市中舒适的居住美宅更受... []
来源:房天下
今天的话题是,有多少爱可以重来?哦,不对!是有多少离婚是因为爱? []
浏览量:25099
位提问人正在寻找答案
手机动态登录
请输入用户名/邮箱/手机号码!
请输入密码!
没有搜房通行证,
ask:2,asku:0,askr:24,askz:16,askzx0:583,ask0:0,RedisW:0askR:0,askD:629 mz:nohit,askU:0,askT:0askA:631
Copyright &
北京拓世宏业科技发展有限公司
Beijing Tuo Shi Hong Ye Science&Technology Development Co.,Ltd 版权所有
客服电话: 400-850-8888 违法信息举报邮箱:

我要回帖

更多关于 delphi 导入excel 的文章

 

随机推荐