Depois de instalar a última versão do LibreOffice no swriter, no windows 10 comecei a receber
esta mensagem tramada e aborrecida porque trava a minha macro e não numera mais o meu
documento automáticamente: com.sun.star.lang.DisposedException
Não consigo perceber o que tenho que fazer. Tanto trabalho (para principiante) , quando tudo estava pronto para colocar em produção sai-me esta, às tantas terei de voltar à versão anterior.
Por favor alguém me ajuda. Obrigado
Poderia postar a macro
Bom dia,
Criei uma macro que atribui o Último numero de documento gravado numa dada pasta +1 e o atribui ou grava num campo REFA. A questão é saber se antes de salvar em disco (BeforePost) há como Interceptar o Nº (ver imagem, pintado azul) de modo a garantir que o N.º do documento gravado em disco não é diferente do nome atribuído automáticamente ou ao menos atribuir um readonly a esse campo uma vez que o Nome é atribuído e enviado à interface pela macro? Obrigado
Se a macro esta somando +1 no ultimo arquivo gravado, não vejo necessidade de conferir se esta certo. Não entendi.
Se postar a MACRO, alguém poderá analisar se pode ocorrer erro.
Boa tarde/bom dia,
Sim a macro está somando; está tudo como pensado, e o user recebe o popup para gravar o “AAAA-1293 odt”, só que o user
continua a dispor da possibilidade de mudar o nome (NREFA) para algo diferente de “AAAA-1293 odt” e eu não posso permitir que o faça, sob pena de não ter a garantia de que o ODT escrito em disco corresponda exatamente à referência (REFA); digamos que preciso de algo muito semelhante à “integridade referencial”, e esta é a fase 1 do projeto.
Na fase 2, todos os dados, porque há mais(além da “REFA”: N/ data e hora, utilizador que criou e que editou, assunto, VREFA, VDT, etc… ) e por último uma barra de certificação electrónica a gravar no final depois do rodapé;
posto isto,os dados serão gravados numa base de dados Firebird (não o são de imediato porque o problemas de acesso ao FB ainda não consegui resolver, mas como funciona via ODBC, vou ver)!
Ainda tenho isso pendurado e estou a estudar como fazer essa gravação pois ela visa implementar um “Livro de Registo de Correspondência Recebida” electrónico.
Do que entendi, até agora, terei que fazer duas chamadas à API StoreDocument(oDoc, FilterNames, sFileNmDoc, sPath) p/ gravar em disco e uma outra StoreDocument(oDoc, FilterNames, sFileNmDoc, sPath, 1) para gravar na base de dados.
Todavia ainda não encontrei um exemplo que faça essa gravação dos campos de um formulário em um ODT numa base de dados! Conhece algum?
Daí que o user não deve poder mudar o nome aquando da gravação. E desde que ele possa mexer eu não tenho como garantir que esse é o nome do documento final e que corresponde mesmo àquela referência.
Pode ajudar? Obrigado
Atentamente
Gilberto Schiavinatto via Ask LibreOffice <noreply@ask.libreoffice.org> escreveu no dia quinta, 22/09/2022 à(s) 03:36:
Terei o maior gosto postar, não só a macro como a ideia (de simular um escritório eletrónico , amador(!) mas p/f deixe-me lantes impar o código (sou principiante em basic)!
Atentamente
Gilberto Schiavinatto via Ask LibreOffice <noreply@ask.libreoffice.org> escreveu no dia quinta, 22/09/2022 à(s) 03:36:
Ainda não entendi completamente a demanda, porém, vou levar em consideração esta parte de seu comentário:
.
Se deseja atribuir um índice/incremento em cada arquivo criado, de modo que o nome não se repita, seria uma macro relacionada a manipulação de diretórios/arquivos. (O QUE EU ENTENDI)
.
Trecho de exemplo para manipulação de Diretório:
oFilePicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
' Abrir retorna 1 (true), Cancelar retorna 0 (false)
If oFilePicker.Execute() then
sTemp() = oFilePicker.getFiles() ' Seleciona apenas 1 arquivo
sPastaOrigem = ConvertFromUrl(sTemp(0)) ' A partir da Url,
sArqNome = Dir$(sPastaOrigem, 16) ' Obtem nome do arquivo com extensão
sArqData = CDateToISO(sPastaOrigem) ' Data em formato ISO
' Obtem apenas último diretorio
sTemp = Dir(sPastaDestino, 16)
' Enquanto retornar pastas, contar diretorios e construir Url da pasta destino com base na data
i = 0
Do While (sTemp <> "")
i = i + 1
sPastaDestino = sPastaDestino & GetPathSeparator()
sPastaDestino = sPastaDestino & Left(sArqData, 4) & GetPathSeparator ' Pasta ano
sPastaDestino = sPastaDestino & Right(sArqData, 4) & GetPathSeparator ' Pasta mes/dia
sPastaDestino = sPastaDestino & "00" & CStr(i) ' Pasta incremento +1
' Se diretorio já existir, desfazer caminho com data para criar um novo com incremento
If FileExists(sPastaDestino) Then
sPastaDestino = Left(sPastaDestino, Len(sPastaDestino) - 14)
End If
sTemp = Dir(sPastaDestino, 16)
Loop
' Se pasta não existir, criar
If Not FileExists(sPastaDestino) Then
MkDir sPastaDestino
End If
' Copia o arquivo para o diretório criado
sPastaDestino = sPastaDestino & GetPathSeparator() & sArqNome
FileCopy(sPastaOrigem, sPastaDestino)
Else
Stop
End If
.
O exemplo acima obtem o arquivo de um local, para armazenar em outra pasta, a qual possuirá sempre uma numeração sequencial, sem se repetir, em cada qual estará um arquivo.
.
O ideal é que poste a macro que o senhor desenvolveu exatamente para ser apontado o “erro”, ou a melhor direção para funcionamento da mesma.