VB.NET Excel Resource File
|
28-09-2011, 12:09
Mensagem: #1
|
|||
|
|||
VB.NET Excel Resource File
Boas,
Sei que VB não deve ser muito popular mas tenho tido problemas numa aplicação que estou a desenvolver. Eu sou auto didacta, pelo que peço alguma paciência se não perceber à primeira. Então aqui vai: Eu desenvolvi uma folha Excel com carradas de macros. Para que o futuro utilizador não possa alterar a folha eu estou a desenvolver uma aplicação no visual studio em visual basic que trabalha sobre o ficheiro. Até agora tenho usado o directório onde está o ficheiro excel e consigo fazer tudo o que quero sobre a folha: inserir dados, retirar dados, correr macros, etc. Mas está na hora de fazer o build e preciso que a aplicação compile o ficheiro. Eu sei que tem a ver com Resource Files mas estes apenas podem ser txt ou binários (na categoria other Resources file types, nas propriedades do projecto). Alguém me sabe dizer como posso "assemblar" o ficheiro na aplicação e como é que posso chamá-lo no código, definir correctamente o tipo de ficheiro (xlsm) e guardá-lo numa variável, por exemplo, xlbook, para não ter de alterar o resto do código cada vez que este trabalha sobre o ficheiro Excel? Cumprimentos. PS: já tentei carregar o ficheiro manualmente no projecto, definir a propriedade "Build Action" as "Embedded Resource", trocar o directório pelo nome do ficheiro, mas ele não reconhece e dá erro. |
|||
28-09-2011, 13:21
(Esta mensagem foi modificada pela última vez a: 28-09-2011 13:22 por Caça.)
Mensagem: #2
|
|||
|
|||
RE: VB.NET Excel Resource File
Se sempre que vais usar essa folha ela tem de estar vazia(tipo um template), adiciona-la aos Resources do projecto e no momento em que vais precisar dela, só tens de a extrair para uma pasta.
Caso contrario coloca-a na pasta onde está o executável ou na pasta AppData do Windows e faz as alterações a partir de lá. |
|||
28-09-2011, 14:21
(Esta mensagem foi modificada pela última vez a: 28-09-2011 14:33 por MininiM.)
Mensagem: #3
|
|||
|
|||
RE: VB.NET Excel Resource File
(não sei se me expliquei bem à primeira)
Mas isso não resolve o problema quando eu tiver que entregar o executável aos utilizadores. Queria evitar que a instalação da aplicação implicasse o copiar de ficheiros externos para pastas especificas. Ou, se não houver alternativa, ao menos que esse processo fosse automático aquando da instalação. Para que se perceba melhor: neste momento, o load do form principal inclui a execução do Excel e a abertura do ficheiro: --- xlapp = CreateObject("Excel.Application") xlbook = xlapp.workbooks.Open("C:\(...)\FolhaExcel.xlsm") xlapp.Visible = False --- A inicialização das variáveis públicas como Excel.Application e Excel.workbook estão num módulo à parte para funcionarem em todos os form's. Ora, tal como está a aplicação, esta depende que o ficheiro esteja no directório C:\(...)\FolhaExcel.xlsm . Quando entregar a aplicação, tanto o ficheiro tem de estar compilado conjuntamente, como o código para abertura do ficheiro não pode depender de um directório. Ao configurar o ficheiro como Resource, ele não aceita a identificação do ficheiro com a extensão .xlsm, mas ao contrário, o windows não sabe qual é o ficheiro que estou a chamar. Ainda pensei nisto, depois de ter configurado o ficheiro como Embedded Resource, mas não funciona porque não tem a extensão, com extensão ele dá erro. --- xlapp = CreateObject("Excel.Application") xlbook = xlapp.workbooks.Open.Me.Resources ("FolhaExcel") ' Eu sei que esta linha não faz muito sentido xlapp.Visible = False --- Espero ter me explicado melhor. |
|||
28-09-2011, 16:39
Mensagem: #4
|
|||
|
|||
RE: VB.NET Excel Resource File
Bem,
Não queria mas vou resolver a questão com um ficheiro .bat e coloco o ficheiro Excel numa pasta DATA. Obrigado na mesma. Se quiserem ir postando sugestões serão sempre bem vindas. Cumprimentos |
|||
28-09-2011, 23:56
Mensagem: #5
|
|||
|
|||
RE: VB.NET Excel Resource File
E então?
Define uma pasta onde vai estar a tua folha. No arranque da aplicação, verificas se a folha existe, caso não exista, copias-la dos Resources para essa pasta(isto iria acontecer no primeiro arranque da aplicação no cliente ou caso alguém apaga-se a folha e assim prevenias um futuro erro). A partir daqui, podes trabalhar normalmente. |
|||
29-09-2011, 00:47
Mensagem: #6
|
|||
|
|||
RE: VB.NET Excel Resource File
Viva,
"Sei que VB não deve ser muito popular mas tenho tido problemas numa aplicação que estou a desenvolver." Quem disse? Em que te baseias? O VB é uma linguagem tão ou mais usada como qualquer outra. Quanto à tua questão não percebi lá muito bem... O teu problema é a localização do ficheiro ou não queres que ninguém tenha acesso? Quando o ficheiro se encontra nos resources, se não me engano, não consegues guardar informação, somente ler, a num ser que no run time da aplicação a copies para uma pasta. Mesmo que desse para editar dentro do resource não seria boa politica visto que o excel, tal como o access, é um ficheiro simples de dados que está sujeito a ficar danificado e por consequente toda a aplicação ficaria inviabilizada porque depois não daria para reparar o mesmo para salvaguardar os dados. Experimenta dizeres à aplicação de que esta tem de ir sempre buscar essa dita folha de excel ao directória da própria app, seja ela qual for. Para isso podes usar o seguinte código: Dim excelFilePath As String = System.Reflection.Assembly.GetExecutingAssembly.Location & "\FolhaExcel.xlsm" xlapp = CreateObject("Excel.Application") xlbook = xlapp.workbooks.Open(excelFilePath) xlapp.Visible = False Não tenho aqui compilador à mão mas penso que é assim. Experimenta e vê se é isso que necessitas. Cumps, Manuel Rocha Licenciado em Informática para a Saúde pela ESTG Leiria Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense Especialização em Design Gráfico |
|||
29-09-2011, 17:03
Mensagem: #7
|
|||
|
|||
RE: VB.NET Excel Resource File
(29-09-2011 00:47)rei007 Escreveu: Dim excelFilePath As String = System.Reflection.Assembly.GetExecutingAssembly.Location & "\FolhaExcel.xlsm" Ok, essa é uma boa solução, mas como é que o ficheiro vai lá parar, como é que publico a aplicação com o ficheiro integrado? E se tiver haver com data files esquece porque só tenho a versão Express. Eu já tenho uma solução ainda que não seja ideal, .bat: --- md C:\Qualquercoisa copy Data\DataExcelFile.xlsm C:\Temp Data\instal --- Obrigado, PS: só disse que não devia ser muito popular porque na minha faculdade falei com muita gente do departamento de informática e todos me diziam que ninguém trabalhava com VBStudio. Fiquei com esta impressão. |
|||
29-09-2011, 17:08
(Esta mensagem foi modificada pela última vez a: 29-09-2011 17:19 por rei007.)
Mensagem: #8
|
|||
|
|||
RE: VB.NET Excel Resource File
Viva,
Agora fiquei ainda mais intrigado. Mas afinal o que é que pretendes fazer? Não pretendes distribuir a aplicação com o ficheiro excel a acompanhar? Após uma pequena pesquisa encontrei este código que aparentemente faz o que pretendes (Retirado daqui): Código: Imports System Depois para usares isto basta chamares a seguinte linha de código: Código: ApplicationEmbeddedFile.SaveToDisk("MyWave.wav", "C:\Temp\MyWave.wav") O que isto faz é simplesmente ir buscar o ficheiro excel que se encontra nos resources do programa e copiar para uma determinada localização. Para copiares para a localização da aplicação, basta fazeres o seguinte: Código: ApplicationEmbeddedFile.SaveToDisk("MyWave.wav", System.Reflection.Assembly.GetExecutingAssembly.Location & "\MyWave.wav") Era isto que pretendias? No google apenas pesquisei por "embeb excel file with vb.net resources" e foi logo o primeiro resultado, ou melhor, o segundo. Tinha um prof na universidade que numa cadeira de C# ele disse, as ferramentas estão em tal parte e os exercícios estão em tal sitio. Nesse ponto eu perguntei ao professor "O professor não vai explicar?" ao que ele me respondeu "O google é teu amigo. Repara que nem eu preciso ir ao quiosque para ler o jornal." A partir desse dia o google passou a ser o meu professor para tudo. Na escola o Google é mais que teu amigo. É preciso é ter vontade de lhe ir perguntar. Cumps, Manuel Rocha Licenciado em Informática para a Saúde pela ESTG Leiria Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense Especialização em Design Gráfico |
|||
29-09-2011, 18:02
Mensagem: #9
|
|||
|
|||
RE: VB.NET Excel Resource File
"Não pretendes distribuir a aplicação com o ficheiro excel a acompanhar?" - Yup. Mas o cliente é único - Mas queria que fosse tudo automático, não vou dizer, instale isto, crie uma pasta ali, passe o ficheiro para aculá...o que seria.
- Na solução que falei uso um ficheiro bat, ponho tudo numa pasta \Data - o ficheiro excel e os ficheiros de instalação da aplicação. O nome do ficheiro bat vai como "instalar" e o código que coloquei antes faz tudo o que se deveria fazer à pata. Mas é uma solução um pouco "ordinária". -- Irei olhar com atenção e testar embora apenas pense que falte uma pequena coisa, o ficheiro enquanto resource (other) tem extensão? Ele na pasta resources tem, mas quando o chamava por exemplo com o método My.Resources(ExcelFile) assim já não sabia que era um ficheiro Excel. Dava - Action on binary file was unhandable... ou coisa parecida Seria necessário, na tua solução, concatenar .xlsm quando copiasse para o output directory? De resto, o google tem sido o meu único professor, tudo o que sei surgiu de lá. Mas estava a falhar, quer dizer, trouxe-se me até aqui.... Eu tentava "VB excel as resource file" e variações mas nunca cheguei lá. Obrigado |
|||
29-09-2011, 18:19
Mensagem: #10
|
|||
|
|||
RE: VB.NET Excel Resource File
Para te facilitar a vida fiz-te um pequeno projecto utilizando o que eu te dei.
Vê anexo. Para replicares basta fazeres tal e qual como vês. Depois é só adicionares o teu ficheiro excel ao teu projecto mas não como resource. Adiciona-o como se fosse um ficheiro normal. Depois vais às propriedades do ficheiro (no visual studio) e no Build Action colocas Embeb resource. Vais ver que vai funcionar. Para conseguires abrir o meu projecto tens de ter o visual studio 2010 premium e a .NET framework 4 instalada. Mas podes sempre abrir o Form1.vb no bloco de notas e ver como está o código. Na pasta bin\debug tens lá um exe de exemplo para poderes ver o produto a funcionar. Cumps, Manuel Rocha Licenciado em Informática para a Saúde pela ESTG Leiria Mestrado em Informática - Especialização em Sistemas de Informação na Universidade Portucalense Especialização em Design Gráfico |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 3 Visitante(s)