mirror of
https://github.com/norandom/log2ml.git
synced 2025-04-19 07:11:27 +00:00
Create create_macro_xls.ps1
Powershell script to create Macro XLS
This commit is contained in:
parent
8c51f1851c
commit
ee5a76d52f
@ -0,0 +1,65 @@
|
|||||||
|
# Create a new COM object for Excel
|
||||||
|
$excel = New-Object -ComObject Excel.Application
|
||||||
|
$excel.Visible = $false # Ensure Excel does not show its window
|
||||||
|
$excel.DisplayAlerts = $false # Disable display alerts to prevent pop-up interruptions
|
||||||
|
$excel.Interactive = $false # Run Excel in non-interactive mode
|
||||||
|
|
||||||
|
# Define the full path to the workbook
|
||||||
|
$workbookPath = "$(Get-Location)\template.xlsx"
|
||||||
|
Write-Host "Attempting to open workbook at path: $workbookPath"
|
||||||
|
|
||||||
|
# Try to open an existing workbook
|
||||||
|
try {
|
||||||
|
$workbook = $excel.Workbooks.Open($workbookPath)
|
||||||
|
} catch {
|
||||||
|
Write-Host "Failed to open the workbook. Check the file path and name. Error: $_.Exception.Message"
|
||||||
|
$excel.Quit()
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
||||||
|
[System.GC]::Collect()
|
||||||
|
[System.GC]::WaitForPendingFinalizers()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
# Assuming access to the VBA project is already allowed in Excel settings
|
||||||
|
try {
|
||||||
|
$excel.VBE.CommandBars.FindControl(1, 2578).Execute()
|
||||||
|
} catch {
|
||||||
|
Write-Host "Could not adjust VBA project settings. Check Excel's trust center settings. Error: $_.Exception.Message"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add a new VBA module
|
||||||
|
$module = $workbook.VBProject.VBComponents.Add(1) # 1 is vbext_ct_StdModule
|
||||||
|
|
||||||
|
# Import VBA code from a file
|
||||||
|
$macroCode = Get-Content "$(Get-Location)\macro.vbs" -Raw
|
||||||
|
$module.CodeModule.AddFromString($macroCode)
|
||||||
|
|
||||||
|
# Add the Workbook_Open event to ThisWorkbook to call GreetUser
|
||||||
|
# German Excel changes the name.
|
||||||
|
# English: replace DieseArbeitsmappe with ThisWorksheet
|
||||||
|
$thisWorkbook = $workbook.VBProject.VBComponents.Item("DieseArbeitsmappe")
|
||||||
|
$openEventCode = @"
|
||||||
|
Private Sub Workbook_Open()
|
||||||
|
Call GreetUser
|
||||||
|
End Sub
|
||||||
|
"@
|
||||||
|
$thisWorkbook.CodeModule.AddFromString($openEventCode)
|
||||||
|
|
||||||
|
# Save the workbook as a macro-enabled workbook
|
||||||
|
$macroEnabledPath = "$(Get-Location)\new_workbook_3.xlsm"
|
||||||
|
$workbook.SaveAs($macroEnabledPath, 52) # 52 stands for xlOpenXMLWorkbookMacroEnabled
|
||||||
|
|
||||||
|
# Clean up: close workbook and quit Excel
|
||||||
|
$workbook.Close($true)
|
||||||
|
$excel.Quit()
|
||||||
|
|
||||||
|
# Reset Excel properties for cleanup
|
||||||
|
$excel.DisplayAlerts = $true
|
||||||
|
$excel.Interactive = $true
|
||||||
|
|
||||||
|
# Release COM objects
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($module) | Out-Null
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
|
||||||
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
|
||||||
|
[System.GC]::Collect()
|
||||||
|
[System.GC]::WaitForPendingFinalizers()
|
Loading…
Reference in New Issue
Block a user