我可以毫无问题地附加到 .csv 文件。
相反,我想附加到 .xlsx 文件,因为我希望能够制作一个漂亮的表。
不幸的是,打开 xlsx 文件后,我收到以下消息:
“ Excel无法打开文件'printlog.xls',因为文件格式或文件扩展名无效。请验证文件未损坏,并且文件扩展名与文件格式匹配。”
它不会对 csv 文件执行此操作。
AHK网站上没有官方文件说FileAppend可以使用 .xlsx 格式,但是网上有很多这样的例子。
这是我的代码:
SetWorkingDir %A_ScriptDir%
ControlGetText, test, Edit10, TeamViewer
filename = %A_ScriptDir%\printlog.xlsx
FileAppend,
(
%test%,%test%,%test%,%test%
%test%,%test%,%test%,%test%
), %filename%
更新:由于@ user3419297的解决方案,第一部分已得到解决。我在下面列出了一个新问题。
FilePath := A_ScriptDir "\printlog.xlsx" ; get file path
SetWorkingDir %A_ScriptDir% ; set working directory
ControlGetText, itemcode, Edit1, Print - ; get item code from print menu
ControlGetText, quantity, Edit2, Print - ; get quantity from print menu
ControlGetText, amount, Edit3, Print - ; get amount from print menu
ControlGetText, initials, Edit4, Print - ; get quantity from print menu
ControlGetText, info, Edit5, Print - ; get quantity from print menu
ControlGetText, batch, Edit6, Print - ; get quantity from print menu
Formattime,ts,,Shortdate ; generate short date variable
oExcel := ComObjCreate("Excel.Application") ; create Excel COM object
oWorkbook := oExcel.Workbooks.Open(FilePath) ; open workbook in Excel object
oExcel.Visible := false ; work in background
; check for blank rows and append values
For Row in oExcel.Range["A1"] ; starting with the first row
{
If (Row.Value = "") ; if first row is blank
{
oExcel.Range("A1").Value := %itemcode% ; set value of cell A-G
oExcel.Range("B1").Value := %quantity%
oExcel.Range("C1").Value := %amount%
oExcel.Range("D1").Value := %initials%
oExcel.Range("E1").Value := %info%
oExcel.Range("F1").Value := %batch%
oExcel.Range("G1").Value := %ts%
}
else ; else find the next blank row and set values of A-G
For eachRow in oExcel.Range["A1:A" oExcel.Columns("A").Find[""].Row]
{
If (eachRow.Value = "")
{
oExcel.Range("A" . A_Index).Value := %itemcode%
oExcel.Range("B" . A_Index).Value := %quantity%
oExcel.Range("C" . A_Index).Value := %amount%
oExcel.Range("D" . A_Index).Value := %initials%
oExcel.Range("E" . A_Index).Value := %info%
oExcel.Range("F" . A_Index).Value := %batch%
oExcel.Range("G" . A_Index).Value := %ts%
break
}
}
}
oWorkbook.Save() ; save workbook and close excel
oExcel.Quit()
如您所见,我收到的错误是一个非法字符。我不明白,因为变量的内容是字符串。这是否与变量本身的格式有关,还是将其附加到excel文件的格式?
答案 0 :(得分:1)
要将文本追加到.xlsx文件,您必须使用COM:
test := "my text"
FilePath := A_ScriptDir "\printlog.xlsx"
oExcel := ComObjCreate("Excel.Application")
oWorkbook := oExcel.Workbooks.Open(FilePath)
oExcel.Visible := false
oExcel.Range("A1").Value := test
oWorkbook.Save()
oExcel.Quit()
另一个例子:
将复制的文本的前3个单词追加到相应列a,b,c中的下一个空行:
FilePath := A_ScriptDir "\printlog.xlsx"
Array:=[]
Array := StrSplit(clipboard, " ")
oExcel := ComObjCreate("Excel.Application")
oWorkbook := oExcel.Workbooks.Open(FilePath)
oExcel.Visible := false
For Row in oExcel.Range["A1"]
{
If (Row.Value = "")
{
oExcel.Range("A1").Value := Array[1]
oExcel.Range("B1").Value := Array[2]
oExcel.Range("C1").Value := Array[3]
}
else
For eachRow in oExcel.Range["A1:A" oExcel.Columns("A").Find[""].Row]
{
If (eachRow.Value = "")
{
oExcel.Range("A" . A_Index).Value := Array[1]
oExcel.Range("B" . A_Index).Value := Array[2]
oExcel.Range("C" . A_Index).Value := Array[3]
break
}
}
}
oWorkbook.Save()
oExcel.Quit()
答案 1 :(得分:1)
这是MS Excel的常见错误。这些是解决方案:
打开并修复选项
删除COM加载项
答案 2 :(得分:1)
对于屏幕截图的第二个问题,这很容易,因为我花了很多时间做这件事……
此:
oExcel.Range("A1").Value := %itemcode%
方法:取变量名称为变量itemcode内容的变量的值(“我猜是。)。
它不适用于您的情况。 示例:
itemcode := "A B"
msgbox %itemcode% ; display will be : A B
所以:
Test := %itemcode%
与:
相同Test = %A B%
未编译。 :-) 因此,除非您有动态变量(很少有这种情况),否则您需要删除%%,以便将其名称存储在另一个变量中(varception?)。
oExcel.Range("A1").Value := itemcode