Macro no Calc - Criar pasta com nome de célula. GNU/Linux

Olá! Necessito constantemente criar pastas em um diretório específico, referente a tarefas que realizo. Nesse diretório salvo documentos para análise.

Ví em outro tópico como criar pastas no Windows, especificando o diretório e nome. Mas necessito criar no Linux, nesse caso teria que dar alguma permissão?

No caso, tenho um intervalo de células com os nomes de pastas (B3:I3).

É possível criar todas as pastas do intervalo ao executar a macro?

Ola @DannyMooreFernandes , testar pesquisei no ChatGPT

Sub CriarVariasPastas()
    Dim oPlanilha As Object
    Dim oCelulas As Object
    Dim oCelula As Object
    Dim i As Integer
    Dim sNomePasta As String
    Dim sDiretorioBase As String
    Dim sCaminhoCompleto As String
    Dim oFS As Object
    
    ' Define a planilha ativa
    oPlanilha = ThisComponent.Sheets(0)
    
    ' Faixa de células de B3 até I3 (colunas 1 a 8, linha 2 - índice começa em 0)
    oCelulas = oPlanilha.getCellRangeByPosition(1, 2, 8, 2)
    
    ' Caminho base (altere conforme seu sistema)
    sDiretorioBase = "/home/seu_usuario/Documentos/Projetos/"  ' Para Linux
    ' sDiretorioBase = "C:\MeusDocumentos\Projetos\"           ' Para Windows
    
    ' Objeto para manipulação de arquivos
    oFS = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
    
    ' Loop nas células da linha 3 (B3 até I3)
    For i = 0 To oCelulas.getColumns().getCount() - 1
        oCelula = oCelulas.getCellByPosition(i, 0)
        sNomePasta = Trim(oCelula.String)
        
        If sNomePasta <> "" Then
            sCaminhoCompleto = sDiretorioBase & sNomePasta
            If Not oFS.exists(sCaminhoCompleto) Then
                oFS.createFolder(sCaminhoCompleto)
            End If
        End If
    Next i

    MsgBox "Pastas criadas com base nas células B3 até I3."
End Sub

Cara, acabei usando IA também…

Usei o DeepSeek e aprimorei o código para rodar em Linux e Windows. Sou bancário e frequentemente mudo de S.O. conforme a estação de trabalho.

Esse foi o código que atendeu a minha especifidade, pode ser útil para outra pessoa:

Function GetOS() As String
’ Função robusta para detectar sistema operacional
On Error Resume Next
Dim testObj As Object
testObj = CreateObject(“WScript.Shell”)
If Err.Number = 0 Then
GetOS = “Windows”
Else
GetOS = “Linux”
End If
On Error GoTo 0
End Function

Sub CriarPastasGSV_Universal
Dim oSheet As Object
Dim oRange As Object
Dim sBasePath As String
Dim i As Integer
Dim sFolderName As String
Dim oFileService As Object

' 1. Configurar caminho conforme o sistema operacional
If GetOS() = "Windows" Then
    Dim oShell As Object
    oShell = CreateObject("WScript.Shell")
    sBasePath = oShell.SpecialFolders("MyDocuments") & "\GSV\"
Else
    sBasePath = "/home/" & Environ("USER") & "/Documentos/GSV/"
End If

' 2. Acessar planilha e intervalo
oSheet = ThisComponent.CurrentController.ActiveSheet
oRange = oSheet.getCellRangeByName("B2:I2")
oFileService = createUnoService("com.sun.star.ucb.SimpleFileAccess")

' 3. Criar pasta base se não existir
If Not oFileService.exists(sBasePath) Then
    oFileService.createFolder(sBasePath)
End If

' 4. Processar células e criar pastas
For i = 0 To oRange.getColumns().getCount() - 1
    sFolderName = Trim(oRange.getCellByPosition(i, 0).getString())
    If sFolderName <> "" And sFolderName <> "-" Then
        Dim sFullPath As String
        sFullPath = sBasePath & sFolderName
        If Not oFileService.exists(sFullPath) Then
            oFileService.createFolder(sFullPath)
        End If
    End If
Next i

' 5. Confirmação final
MsgBox "Pastas criadas com sucesso em " & sBasePath, 0, "Concluído"

End Sub

Como funciona:

  1. Detecção do SO:

    • A função GetOS() verifica a variável de ambiente PATH
    • Se contiver “:” (típico de caminhos Windows), identifica como Windows
    • Caso contrário, assume Linux/Unix
  2. Caminhos adaptativos:

    • Windows: Usa MyDocuments\GSV\
    • Linux: Usa /home/[usuário]/Documentos/GSV/
  3. Lógica unificada:

    • O restante do código é comum para ambos os sistemas
    • Mantém todas as otimizações pedidas (apenas um MsgBox final)

Benefícios:

  • Única macro para todas as plataformas
  • Detecção automática do ambiente
  • Mantém a eficiência (sem caixas de diálogo intermediárias)
  • Mensagem final mostra o caminho exato onde as pastas foram criadas

Observação: A macro presume que no Linux o usuário tenha uma pasta “Documentos” dentro do seu home directory (padrão em distribuições como OpenSUSE). Caso seu Linux use outro nome (ex: “Documents”), basta ajustar o caminho no código.

2 Likes