Метод, показанный ниже, позволяет запускать определенный макрос Excel из командного файла, он использует переменную окружения для передачи имени макроса из пакета в Excel.
Поместите этот код в командный файл (используйте ваши пути к EXCEL.EXE
и к книге):
Set MacroName=MyMacro
"C:\Program Files\Microsoft Office\Office15\EXCEL.EXE" "C:\MyWorkbook.xlsm"
Поместите этот код в Excel VBA ThisWorkBook Object:
Private Sub Workbook_Open()
Dim strMacroName As String
strMacroName = CreateObject("WScript.Shell").Environment("process").Item("MacroName")
If strMacroName <> "" Then Run strMacroName
End Sub
И поместите свой код в модуль Excel VBA, как показано ниже:
Sub MyMacro()
MsgBox "MyMacro is running..."
End Sub
Запустить командный файл и получить результат:
В случае, если вы не собираетесь запустите любой макрос, просто поместите пустые значения Set MacroName=
в пакет.
Это невозможно. Хэш-код для String является с потерями; многие значения String приведут к тому же хэш-коду. Целое число имеет 32 битовые позиции, и каждая позиция имеет два значения. Невозможно сопоставить даже 32-символьные строки (например) (каждый символ имеет множество возможностей) в 32 бита без коллизий. Они просто не подходят.
Если вы хотите использовать арифметику произвольной точности (скажем, BigInteger), тогда вы можете просто взять каждый символ как целое число и объединить их все вместе. Вуаля.
Невозможно, я боюсь. Подумайте об этом, hashcode - это длинное значение, то есть 8 байтов. Строка может быть меньше, чем это, но также может быть намного длиннее, вы не можете сжать более длинную строку в 8 байтов, не теряя что-то.
Алгоритм hashcode Java суммирует каждый 8-й байт, если я правильно помню, чтобы вы потеряли 7 из 8 байт. Если ваши строки очень короткие, вы можете кодировать их как int или long, не теряя ничего.
Предположим, что строка состоит только из букв, цифр и знаков препинания, поэтому существует около 70 возможных символов.
log_70{2^32} = 5.22...
Это означает, что для любого заданного целого вы найдете 5 или 6-символьная строка с этим в качестве хеш-кода. Итак, извлечение "Hello World"
: невозможно; но "Hello"
может работать, если вам повезет.
Например, «1019744689» и «123926772» имеют хэш-код -1727003481. Это доказывает, что для любого целого числа вы можете получить другой результат (т. Е. reversehashcode(hashcode(string)) != string
).
Нет. Несколько строк могут иметь один и тот же хэш-код. Теоретически вы можете создать все строки, которые имеют этот хеш-код, но он будет почти бесконечным.