我想在Excel 2010中使用vba循环遍历目录的文件.
在循环中,我将需要
我编写了以下代码,如果该文件夹没有超过50个文件,则工作正常,否则它是非常慢的(我需要它与> 10000文件的文件夹一起使用).这段代码唯一的问题是查找操作file.name
需要花费很多时间.
代码有效,但waaaaaay太慢(每100个文件15秒):
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
Set MySource = MyObj.GetFolder("c:\testfolder\")
For Each file In MySource.Files
If InStr(file.name, "test") > 0 Then
MsgBox "found"
Exit Sub
End If
Next file
End Sub
Run Code Online (Sandbox Code Playgroud)
问题解决了:
Dir
以特定方式(15000个文件为20秒)和使用该命令检查时间戳来解决FileDateTime
. 许多人在Excel/VBA中使用大量数组来存储数据列表.但是,在我看来,收集对象更方便(主要是:不需要重新定义列表的长度).
所以,我真诚地问自己,我是否遗漏了什么?为什么其他人仍然使用数组来存储数据列表?这只是过去的宿醉吗?
是否可以使用常用的Excel VBA编辑器,可以使用Excel中的Alt + F11进行访问?
我更喜欢Visual Studio IDE,例如我在C#中开发的时候.它的一个不足之处包括一个简单的事实,即没有键盘快捷键来停止调试过程,尽管我觉得Excel VBA编辑器还存在其他问题.
我已经定义了一个具有自己类型的变量
Dim point As DataPoint
Public Type DataPoint
list as Collection
name as String
number as Integer
End Type
Run Code Online (Sandbox Code Playgroud)
我想point
一次删除变量的所有值.如果它是一个类,我会使用Set point = New DataPoint
或设置Set point = Nothing
,但如果它是一个类型我该怎么办?
我在Excel VBA中使用词典dict As New Dictionary
(并添加对脚本运行时的引用).当我在调试期间尝试监视这些时,我只能看到字典中的键,而不是每个键的相应值.
有没有办法看到这个价值?它会让调试变得更容易.
编辑:根据您的答案,没有简单的解决方案,但我可以做到以下几点.
使用全局变量Dim d_obj As Object
并持续监视它,每当我需要查找字典的值时,我键入立即窗口Set d_obj(key) = ...
,我将能够在监视器窗口中看到该值.
我还可以做的是编写一个函数,它接收字典并将值作为列表返回,并在直接窗口中类似地使用此函数.对所有人来说!
我正在使用下面的 VBA 代码在 Excel 中打开 csv 文件(该代码模拟 Data\Text to Columns - 命令)。在代码中,需要为属性TextFileColumnDataTypes指定一个数组,该数组为 csv 文件中的每一列指定数据格式(2 = 文本格式)。
但是,由于我不知道 csv 文件将有多少列,因此我想为 csv 文件中的所有列指定格式 2(= 文本格式)。现在的问题是我只能指定固定数量的列的数据格式(在下面的示例中为 3 列)。
非常感谢任何解决该问题的帮助:)
=================================================
这是我正在使用的完整代码:
With ThisWorkbook.Worksheets(1).QueryTables.Add(Connection:= _
"TEXT;C:\test.csv", Destination _
:=ThisWorkbook.Worksheets(1).Range("$A$1"))
.name = "Query Table from Csv"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow …
Run Code Online (Sandbox Code Playgroud) 在本提到的线程,以及在这里我使用mkbundle -o newfile oldfile.exe --static
(OS:Ubuntu的11.10 64位,单声道:2.10.5)来创建其应在Apache Web服务器的可执行文件(OS:的Debian GNU/Linux的32位).这里oldfile.exe
是使用C#-Hello-World-Code编译的结果mcs oldfile.cs
.在原始系统(使用Ubuntu)上,该文件是可执行的.但是,当我newfile
在Apache Web服务器上调用时,我收到错误:
不能执行二进制文件
此外,在做的file newfile
时候说
ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享库),不剥离
我怀疑如果mkbundle按照预期工作,那么它应该已经读过了
......静态联系......
不应该吗?任何人都知道为什么文件在服务器上不可执行?这是因为32位/ 64位的问题吗?
我的问题: Python 工具 Poetry 如何知道一个项目的虚拟环境的路径?
说明:当我poetry init
在目录中运行时,会创建一个新项目。然后我运行poetry install
并创建一个新的虚拟环境。但是,该虚拟环境的路径和散列都没有存储在我预期的中pyproject.toml
或poetry.lock
如我预期的那样。当我运行时,Poetry 如何知道虚拟环境的位置poetry env info -p
?
除了想知道发生了什么之外,我还需要知道这一点,原因有两个:
可能的解决方案:查看 Poetry 的源代码,在我看来,一个文件envs.toml
可能包含从文件系统目录到虚拟环境哈希的映射,但在我的 Mac OS 11.1 上我找不到这样的文件。
我正在Amazon Textract API
通过 AWS 的 Python API 使用 来从文档(pdf
或jpg
)中提取文本。我确实获得了其边界框的文本和坐标,但我也希望拥有字体类型(仅需要主要的字体类型:Arial、Helvetica、Verdana、Calibri、Times New Roman + 一些其他字体)。
有人有解决方案来获取该数据吗?
最好的解决方案可能是一个包,它接受小图像,返回字体类型名称,并且我可以在我的服务器上运行它。外部 API 很可能成本太高(金钱和时间方面),因为我必须在一秒钟内运行它 100 多次。
{'BlockType': 'LINE',
'Confidence': 99.81985473632812,
'Text': 'This is a text',
'Geometry': {'BoundingBox': {'Width': 0.7395017743110657,
'Height': 0.012546566314995289,
'Left': 0.12995509803295135,
'Top': 0.2536422610282898},
'Polygon': [{'X': 0.12995509803295135, 'Y': 0.2536422610282898},
{'X': 0.8694568872451782, 'Y': 0.2536422610282898},
{'X': 0.8694568872451782, 'Y': 0.2661888301372528},
{'X': 0.12995509803295135, 'Y': 0.2661888301372528}]},
'Id': '59f42615-7f33-41d2-9f3c-77ae5e4b6e7a',
'Relationships': ...}
Run Code Online (Sandbox Code Playgroud)
我实现了一个解决方案,它计算文本的比率width/height
,并通过使用 Python 的枕头包和不同的字体类型以编程方式绘制相同的文本,然后比较比率来进行比较。然而,这种启发式方法常常会导致错误的结果。
我想有一个简短形式的SQL命令(我正在使用Oracle SQL)
SELECT * from table1
WHERE field1 not like '%test%'
AND field2 not like '%test%'
AND field3 not like '%test%'
Run Code Online (Sandbox Code Playgroud)
是否有与该命令等效的语法?我在考虑类似的事情
SELECT * from table1
WHERE '%test%' not in (field1, field2, field3)
Run Code Online (Sandbox Code Playgroud)
但遗憾的是这种语法不起作用?!非常感谢所有提示和建议.