- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我附加到 .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 文件的格式有关?
最佳答案
要将文本附加到 .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()
关于excel - 为什么使用 AutoHotkey 附加到 xls 文件时会出现格式/扩展名错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51862187/
精彩的 AutoHotKey 允许您在键入时自动扩展缩写。 所以你可以有一个带有许多缩写的 .ahk 脚本,如下所示: ::btw::by the way ::iirc::if I remember
我对 autohotkey 还很陌生,目前对 ControlClick 存在误解。 我的目标是使用 ControlClick 右键单击工具栏Window321 上的图标以显示上下文菜单。我不想使用
我想获取自午夜以来以毫秒为单位的当前时间。 我不知道这是否可能? 我知道 A_TickCount 给出了计算机重新启动后的毫秒数。 最佳答案 参见 DateTime 可以从当前时间计算毫秒数,如下所示
我正在尝试在 Windows 中使用相同的 hokey 打开和关闭程序(例如记事本),比如说 Strg+Alt+X。所以,当程序关闭时,我希望用“X”打开它,当它打开时我希望用“X”关闭它。 这真的很
我在 Windows 7 中使用 AutoHotKey 脚本将剪贴板的内容作为一系列击键发送。我对 AutoHotKey 很陌生,但我想知道是否有某种方法可以调整它发送的每次击键之间的时间。目前,我的
如何延迟 Send AutoHotkey 中的命令? 如果 AutoHotkey 发送按键的速度比程序可以注册输入的速度快,那么单词最终可能会因缺少字母而输错。 ( stuff 最终像 stf ,或
我正在尝试创建一个脚本,该脚本将采用名称并将其添加到预先编写的文本 block 中。 本质上,我想写“emailDave”并将名字 Dave 插入到一个文本字符串中,然后发送。我只是不确定如何以这种方
在测试 AutoHotkey 脚本时,我有时会忘记在更改后重新加载我的脚本。这导致我不小心测试了我的脚本的旧版本。 如果脚本已被修改,我希望脚本自动重新加载,而不是手动重新加载脚本。 如何让 Auto
我有这个游戏脚本 ~Rbutton & M:: SendInput t You have the right to remain silent. Anything you say can and wi
如果您使用 length() associative array 上的函数,它将返回数组中使用的“最大索引”。因此,如果您有任何不是整数的键,则 length() 将不会返回数组中元素的实际数量。 (
我知道您可以运行并实时重新加载 ahk脚本。我见过 scintilla-based editor提供调试。但是,是否有任何基于命令行的 REPL ? 我正在测试对 get the active win
我有一个奇怪的错字,我一遍又一遍地犯,而不是实际工作我的打字技巧,我想编辑我的 AutoHotkey 脚本来弥补这一点。 有时,当我输入大写字母时,我会点击:按钮并输入“I:”,我希望 AHK 仅用字
我想使用 Autohotkey 连接变量 1、剪贴板内容和变量 2。 例如,如果: variable1 = https://example.com/somepage.php?command=detai
我正在尝试在 AutoHotKeys 中使用相对路径,以便可以 check out 源代码管理并且热键仍然有效。 使用 %A_WorkingDir% 给我脚本的位置。从那里我需要向上移动一个目录并向下
我将其编译为可执行文件,但要打开它,我必须右键单击并按“以管理员身份运行”。我希望它每次运行时都请求管理员权限,但是怎么做呢? 我不能这样做: 因为当我将它复制到第二台计算机时它不起作用。 最佳答案
我想要一个脚本,其中按 F1 使 AutoHotkey 按住鼠标左键。然后我希望脚本在我再次按下该键时释放鼠标。 我怎样才能做到这一点? 最佳答案 我会使用 Click down 和 Click up
我想在每次切换到特定程序时激活声音配置文件,并在每次离开时更改回默认配置文件。 此操作在 GUI 中通过单选按钮打开。 我创建的解决方法是: Auto_Ftsps: gui, Submit,
我正在编写一个 AutoHotkey 脚本,需要在其中处理控件事件。更具体地说,我有一个 Edit 和一个伙伴 UpDown 控件。当用户在编辑中按 Enter 时,我需要响应/处理事件,或者作为另一
我尝试使用此脚本同时发送三个键(Alt、Shift、Q): :*:pk:: ; Send, {AltDown}{ShiftDown}{qDown} return 当我运行此命令时,它不会释放按键,
我正在编写一个 AutoHotkey 脚本,需要在其中处理控件事件。更具体地说,我有一个 Edit 和一个伙伴 UpDown 控件。当用户在编辑中按 Enter 时,我需要响应/处理事件,或者作为另一
我是一名优秀的程序员,十分优秀!