VC操作Excel的又一个问题:关于SaveAs函数的使用方法(劳驾了)

delete_qing 2005-01-21 03:00:51
在Office2003版Office所生成的Excel.cpp文件中,类_Workbook下有一个SaveAs函数,其定义如下:
void SaveAs(const VARIANT& Filename,
const VARIANT& FileFormat,
const VARIANT& Password,
const VARIANT& WriteResPassword,
const VARIANT& ReadOnlyRecommended,
const VARIANT& CreateBackup,
long AccessMode,
const VARIANT& ConflictResolution,
const VARIANT& AddToMru,
const VARIANT& TextCodepage,
const VARIANT& TextVisualLayout,
const VARIANT& Local);
请问这个函数的使用方法几个参数的意义,谢谢了.
...全文
962 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wf21cn 2005-03-04
  • 打赏
  • 举报
回复
用SaveCopyAs(_variant_t(filePathName));
不用那么多参数的
qrlvls 2005-01-21
  • 打赏
  • 举报
回复
默认参数在VC中
可以使用类型为 VT_ERROR 的CVariant 来代替
qrlvls 2005-01-21
  • 打赏
  • 举报
回复
Question:
Nothing like trying to learn/teach yourself something new to make you humble. Winbatch 99p, Excel 97.
I'm loading a tab delimited file {M:\somedir\myfile.txt} into Excel using OLE to manipulate it some & want to save it as an Excel .xls file {M:\somedir\myfile.txt}.

I can get the file to save under the new name, i.e. with the .xls extension but it's still in tab delimited format, NOT Excel's native file format. The following is from a macro I recorded while doing the action I want to automate: ActiveWorkbook.SaveAs FileName:="M:\TMI_Data\Processed\FEB00.xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

I can get the following code to save the file and add the filename to the MRU list.

fileXL ="M:\TMI_Data\Processed\FEB00.xls"

Awkbk=ObjXL.ActiveWorkbook
savefile=Awkbk.SaveAs (fileXL) ; this works

OR
savefile=Awkbk.SaveAs ( fileXL, , , , , ,@True ) ; this works the @True adds the file to the MRU list.

But, whenever I try to insert something in the position that I think the fileformat stuff is supposed to go I get 1261 OLE exception errors or 3250 OLE Object error : Problem occurred formatting parameters. I'm wondering if it's a Named parameter ? If I'm understanding the docs correctly (big IF) a named parameter would go after all the positional parameters ? T/F ?
I've tried a lot of permutations & combinations & haven't stumbled up on something that'll work yet.

How does one differentiate between /tell one from the other on Named vice positional parameters ? I've looked in the VBA help & haven't stumbled onto anything.

Answer:
Sounds like you almost have it. Positional parameters first, then the :: then the parameter=value pairs for the named parameters.
Question (cont'd):
I'm just not grasping something here.
I've tried the line :

savefile=Awkbk.SaveAs ( fileXL, , , , , , , , , , ::FileFormat = "xlNormal")

with 0 to 10 commas for "positional parameters" between the "fileXL" & the "::".
With 0 or 1 comma I get 1261 OLE exception Error & the following entry from wwwbatch.ini

[OLE Exception]
Microsoft Excel=Unable to get the SaveAs property of the Workbook class

With 2 to 10 commas I get NO ERRORS, BUT while it saves with an .xls extension it is still Tab delimited.
How can you tell if a parameter is a "Named Parameter" ?

The VBA docs make the stuff all look like "Positional parameters"

Answer:
Maybe there are three required parameters?

Maybe xlNormal is not a tring but a constant and we have to figure out what number it is?

Maybe cut and paste the SaveAs documentation here and we can stare at it.

Bit of an OLE tip that I found a bit by accident.
If you want to know whether something is a string or a constant, do it in VBA - in this case, something like

var=xlNormal

If it bombs out, it's a string. If it doesn't, it'll return a value for you to plug into your scripts.
Here's the docs for the "SaveAs Method" clipped direct from the VBA help : Saves changes to the sheet (Syntax 1) or workbook (Syntax 2) in a different file.
Syntax 1
expression.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodePage, TextVisualLayout)

Syntax 2
expression.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout)

expression Required. An expression that returns a Chart or Worksheet object (Syntax 1) or a Workbook object (Syntax 2).
Filename Optional Variant. A string that indicates the name of the file to be saved. You can include a full path; if you don't, Microsoft Excel saves the file in the current folder.
FileFormat Optional Variant. The file format to use when you save the file. For a list of valid choices, see the FileFormat property.
Password Optional Variant. A case-sensitive string (no more than 15 characters) that indicates the protection password to be given to the file.
WriteResPassword Optional Variant. A string that indicates the write-reservation password for this file. If a file is saved with the password and the password isn't supplied when the file is opened, the file is opened as read-only.
ReadOnlyRecommended Optional Variant. True to display a message when the file is opened, recommending that the file be opened as read-only.
CreateBackup Optional Variant. True to create a backup file.
AccessMode Optional Variant. The workbook access mode. Can be one of the following XlSaveAsAccessMode constants: xlShared (shared list), xlExclusive (exclusive mode), or xlNoChange (don't change the access mode). If this argument is omitted, the access mode isn't changed. This argument is ignored if you save a shared list without changing the file name. To change the access mode, use the ExclusiveAccess method.
ConflictResolution Optional Variant. Specifies the way change conflicts are resolved if the workbook is a shared list. Can be one of the following XlSaveConflictResolution constants: xlUserResolution (display the conflict-resolution dialog box), xlLocalSessionChanges (automatically accept the local user's changes), or xlOtherSessionChanges (accept other changes instead of the local user's changes). If this argument is omitted, the conflict-resolution dialog box is displayed.
AddToMru Optional Variant. True to add this workbook to the list of recently used files. The default value is False.
TextCodePage Optional Variant. Not used in U.S. English Microsoft Excel.
TextVisualLayout Optional Variant. Not used in U.S. English Microsoft Excel.

Resolution:
GREAT Tip -- I inserted your line into the macro & then stepped thru it. It returned a value of -4143. I plugged it into the command like so:
savefile=Awkbk.SaveAs ( fileXL, -4143 , , , , ,@True )

and SHAZAM it works ! It would have been A WHILE before I'd have stumbled on to that. Thanks Again.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧