| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8869 人关注过本帖
标题:求解用OLEAPP.ACTIVEWORKBOOK.SAVEAS()保存的xls文件为何在excel2013中打开 ...
只看楼主 加入收藏
IHORSE
Rank: 1
等 级:新手上路
帖 子:41
专家分:5
注 册:2007-2-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:21 
求解用OLEAPP.ACTIVEWORKBOOK.SAVEAS()保存的xls文件为何在excel2013中打开提示错误。
用createobj的方法创建了excel对象,然后把dbf表的内容写入到一个xls文件中,
有部分语句如下:


OLEAPP=CREATEOBJECT("Excel.Application")
OLEAPP.VISIBLE=.F. &&bu显示 Excel。
OLEAPP.WORKBOOKS.ADD
****这几行代码是写入数据的

OLEAPP.ACTIVEWORKBOOK.SAVEAS("&xlsfile")  &&xlsfile对应某个具体文件
OLEAPP.WORKBOOKS.CLOSE


 写入数据成功了的,但是,用excel2013打开这个xls文件的时候提示“。。。。的文件格式和扩展名不匹配,文件可能已经损坏或不安全,除非您信任其来源,否则请勿打开。是否仍要打开它?”,点击“是”按钮后,可以打开,文件内容也可读。但是,只要不另存为excel的格式而直接保存,下次打开该文件仍要出现这个提示。
请问这是什么原因?如何才能避免??

搜索更多相关主题的帖子: excel 扩展名 Excel 
2016-02-03 10:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
有文件有真相
就用这几句随便写入几个数据保存的文件放上来给测试
2016-02-03 11:28
IHORSE
Rank: 1
等 级:新手上路
帖 子:41
专家分:5
注 册:2007-2-11
收藏
得分:0 
回复 2楼 吹水佬
好吧,我把那excel文件放上来
代号-1.rar (10.99 KB)
2016-02-03 11:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
随便写几个数据不会成这样,不知道你写了些什么进去?
看看下面出除了“****这几行代码是写入数据的”这里不同,其他是照搬。
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-02-03 14:13
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

我的电脑也是这样,我的是2007

OLEAPP=CREATEOBJECT("Excel.Application")
OLEAPP.VISIBLE=.F. &&bu显示 Excel。
OLEAPP.WORKBOOKS.ADD
****这几行代码是写入数据的
OLEAPP.cells[1,1].value="1111"
OLEAPP.cells[1,2].value="2222"

OLEAPP.ACTIVEWORKBOOK.SAVEAS("c:\kkk.xls")  &&xlsfile对应某个具体文件
OLEAPP.WORKBOOKS.CLOSE
2016-02-03 14:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
可能是版本兼容问题
我的是 Microsoft Office 2003 绿色精简版 + Microsoft Office 文件格式兼容包
2016-02-03 14:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:5 
OLEAPP=CREATEOBJECT("Excel.Application")
OLEAPP.VISIBLE=.F. &&bu显示 Excel。
OLEAPP.WORKBOOKS.ADD
****这几行代码是写入数据的
OLEAPP.cells[1,1].value="1111"
OLEAPP.cells[1,2].value="2222"
OLEAPP.ACTIVEWORKBOOK.SAVEAS("c:\kkk.xls")  &&xlsfile对应某个具体文件
OLEAPP.ACTIVEWORKBOOK.SAVEAS("c:\kkk.xlsx")  &&文件保存为XLSX就不会不错误
OLEAPP.WORKBOOKS.CLOSE
2016-02-03 14:48
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:0 
vfp如何判断用户装的EXCEL是2003还是2007及以上呢?

只求每天有一丁点儿的进步就可以了
2016-02-03 17:10
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:5 
VFP 版:
Clear
Try
    Obj = Createobject("Word.Application")
    ? "MS Office Ver. : ", Obj.Version
    Obj.Quit(.F.)
Catch To oException
    ? "Not Installed", oException.ErrorNo
Endtry


DOS 版:
@echo off
setlocal enabledelayedexpansion
for /l %%a in (8,1,14) do (
    reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\%%a.0\Common\LanguageResources /v SKULanguage>nul 2>nul
    if !errorlevel!==0 (
        if %%a==8 (
            set OffiVer=Office 97
        ) else if %%a==9 (
            set OffiVer=Office 2000
        ) else if %%a==10 (
            set OffiVer=Office XP
        ) else if %%a==11 (
            set OffiVer=Office 2003
        ) else if %%a==12 (
            set OffiVer=Office 2007
        ) else if %%a==14 (
            set OffiVer=Office 2010
        ) else if %%a==15 (
            set OffiVer=Office 2013
        ) else if %%a==15.11 (
            set OffiVer=Office 2016
        ) else (
            set OffiVer=Not installed
        )
    )
)
echo MS Office Version : %OffiVer%
pause

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-02-03 17:29
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:5 
判别你的机子上是否已安装了 MS Office (MS Outlook、MS Word、MS Excel)

Clear
ckey = "Software\Microsoft\Windows\CurrentVersion\App Paths\outlook.exe"
OutlookExists = readregstring(-2147483646, ckey, "path")

ckey = "Software\Microsoft\Windows\CurrentVersion\App Paths\winword.exe"
WinWordExists = readregstring(-2147483646, ckey, "path")

ckey = "Software\Microsoft\Windows\CurrentVersion\App Paths\excel.exe"
ExcelExists = readregstring(-2147483646, ckey, "path")

? Iif(!Empty(Nvl(OutlookExists,"")), "已安装 MS Outlook", "未安装 MS Outlook")
? Iif(!Empty(Nvl(WinWordExists,"")), "已安装 MS Word", "未安装 MS Word")
? Iif(!Empty(Nvl(ExcelExists,"")), "已安装 MS Excel", "未安装 MS Excel")


Function ReadRegString
    ***----------------------------------------------------------------------
    *** Function: Reads a string value from the registry.
    *** Pass: tnHKEY - HKEY value (in CGIServ.h)
    *** tcSubkey - The Registry subkey value
    *** tcEntry - The actual Key to retrieve
    *** Return: Registry String or .NULL. on error
    ***----------------------------------------------------------------------
    Lparameters tnHKey, tcSubkey, tcEntry
    Local lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType

    tnHKey=Iif(Type("tnHKey")="N",tnHKey,This.HKEY_LOCAL_MACHINE)

    lnRegHandle=0

    Do DeclareInit && Declare WinAPI function. You only have to do this once.

    *** Open the registry key
    lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
    If lnResult # 0
        Return .Null.
    Endif

    *** Need to define here specifically for Return Type
    *** for lpdData parameter or VFP will choke.
    *** Here it's STRING.
    Declare Integer RegQueryValueEx ;
        IN Win32API As RegQueryString;
        INTEGER nHKey,;
        STRING lpszValueName,;
        INTEGER dwReserved,;
        INTEGER @lpdwType,;
        STRING @lpbData,;
        INTEGER @lpcbData

    *** Return buffer to receive value
    lcDataBuffer=Space(256)
    lnSize=Len(lcDataBuffer)
    lnType=0

    lnResult=RegQueryString(lnRegHandle,tcEntry,0,@lnType,;
        @lcDataBuffer,@lnSize)

    =RegCloseKey(lnRegHandle)

    If lnResult # 0
        Return .Null.
    Endif

    If lnSize<2
        Return ""
    Endif

    *** Return string based on length returned
    Return Substr(lcDataBuffer,1,lnSize-1)
Endfunc


*!*    And the DeclareInit function that is called:
Function DeclareInit
    *** Open a registry key
    Declare Integer RegOpenKey ;
        IN Win32API ;
        INTEGER nHKey,;
        STRING cSubKey,;
        INTEGER @nHandle

    *** Close an open registry key
    Declare Integer RegCloseKey ;
        IN Win32API ;
        INTEGER nHKey
Endfunc

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-02-03 17:38
快速回复:求解用OLEAPP.ACTIVEWORKBOOK.SAVEAS()保存的xls文件为何在excel2013中 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045502 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved