Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536

    Creazione file Ms Word con Asp

    Ciao ragazzi, aiutatemi a risolvere questo problema.

    Devo creare con asp un file word e devo "riempirlo" con i campi prelevati da un DB SqlServer in modo da ottenere una lettera che abbia al suo interno:

    - Settaggio margini;
    - una carta intestata dinamica che, in base alla società scelta, visualizzi diverse intestazioni e piè di pagina.
    - Destinatario:
    - Oggetto;
    - Date e numero di documento.
    - Disposizione prefissata dei campi sopraindicati.

    Questi campi bisogna renderli non modificabili, in quanto prelevati dal DB, mentre il corpo della lettera deve poter essere scritto liberamente (in quanto non prelevato dal DB).

    Al momento ho a disposizione due pagine ASP che si avvicinano alla soluzione, ma non la risolvono.

    La prima utilizza l'oggetto Scripting.FileSystemObject. E' possibile inserire l'intestazione e il piè di pagina mediante MyFile.WriteLine "{\header\ql{\pict\jpegblip...." e MyFile.WriteLine "{\footer\ql{\pict\jpegblip...."
    ma non è possibile settare i margini, prende di default i classici margini di un documento DOC.

    Nella seconda, valorizzando tutta una serie di parametri:
    testo="MIME-Version: 1.0"& VbCrLf &_
    "Content-Location: file:///C:/0C6649EF/"& nomefileS &".htm"& VbCrLf &_

    "Content-Transfer-Encoding: quoted-printable"& VbCrLf &_
    "Content-Type: text/html; charset=""us-ascii"""& VbCrLf & VbCrLf &_
    "<html xmlns=3D""urn:schemas-microsoft-comfficeffice"""& VbCrLf &_
    "xmlns:w=3D""urn:schemas-microsoft-comffice:word"""& VbCrLf &_
    "xmlns=3D""http://www.w3.org/TR/REC-html40"">"& VbCrLf & VbCrLf &_

    "<head>"& VbCrLf &_
    "<meta http-equiv=3DContent-Type content=3D""text/html; charset=3Dus-ascii"">"& VbCrLf &_
    "<meta name=3DProgId content=3DWord.Document>"& VbCrLf &_
    "<meta name=3DGenerator content=3D""Microsoft Word 11"">"& VbCrLf &_
    "<meta name=3DOriginator content=3D""Microsoft Word 11"">"& VbCrLf &_
    "<link rel=3DFile-List href=3D"""& nomefileS &"_file/filelist.xml"">"& VbCrLf &_
    "<title></title>"& VbCrLf &_
    "<!--[if gte mso 9]><xml>"& VbCrLf &_
    " <oocumentProperties>"& VbCrLf &_
    " <o:Author>"& autore &"</o:Author>"& VbCrLf &_
    " <o:Template>Normal</o:Template>"& VbCrLf &_
    " <o:LastAuthor>" & autore & "</o:LastAuthor>"& VbCrLf &_
    " <o:Revision>1</o:Revision>"& VbCrLf &_
    " <o:TotalTime>1</o:TotalTime>"& VbCrLf &_
    " <o:Created>2004-01-22T14:31:00Z</o:Created>"& VbCrLf &_
    " <o:LastSaved>2004-01-22T14:33:00Z</o:LastSaved>"& VbCrLf &_
    " <o:Pages>1</o:Pages>"& VbCrLf &_
    " <o:Words>4</o:Words>"& VbCrLf &_
    " <o:Characters>24</o:Characters>"& VbCrLf &_
    " <o:Company>"& azienda &"</o:Company>"& VbCrLf &_
    " <o:Lines>1</o:Lines>"& VbCrLf &_
    " <o:Paragraphs>1</o:Paragraphs>"& VbCrLf &_
    " <o:CharactersWithSpaces>27</o:CharactersWithSpaces>"& VbCrLf &_
    " <o:Version>11.5703</o:Version>"& VbCrLf &_
    "</oocumentProperties>"& VbCrLf &_
    "</xml><![endif]--><!--[if gte mso 9]><xml>"& VbCrLf &_
    "<w:WordDocument>"& VbCrLf &_
    " <w:View>Print</w:View>"& VbCrLf &_
    " <w:Zoom>90</w:Zoom>"& VbCrLf &_
    " <w:SpellingState>Clean</w:SpellingState>"& VbCrLf &_
    " <w:GrammarState>Clean</w:GrammarState>"& VbCrLf &_
    " <w:HyphenationZone>14</w:HyphenationZone>"& VbCrLf &_
    " <w:ValidateAgainstSchemas/>"& VbCrLf &_
    " <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>"& VbCrLf &_
    " <w:IgnoreMixedContent>false</w:IgnoreMixedContent>"& VbCrLf &_
    " <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>"& VbCrLf &_
    " <w:Compatibility>"& VbCrLf &_
    " <w:BreakWrappedTables/>"& VbCrLf &_
    " <w:SnapToGridInCell/>"& VbCrLf &_
    " <w:WrapTextWithPunct/>"& VbCrLf &_
    " <w:UseAsianBreakRules/>"& VbCrLf &_
    " <w:UseWord2002TableStyleRules/>"& VbCrLf &_
    " </w:Compatibility>"& VbCrLf &_
    " <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>"& VbCrLf &_
    " </w:WordDocument>"& VbCrLf &_
    "</xml><![endif]--><!--[if gte mso 9]><xml>"& VbCrLf &_
    "<w:LatentStyles DefLockedState=3D""false"" LatentStyleCount=3D""156"">"& VbCrLf &_
    "</w:LatentStyles>"& VbCrLf &_
    "</xml><![endif]-->"& VbCrLf &_
    "<style>"& VbCrLf &_
    "<!--"& VbCrLf &_
    " /* Style Definitions */"& VbCrLf &_
    " p.MsoNormal, li.MsoNormal, div.MsoNormal"& VbCrLf &_
    " {mso-style-parent:"""";"& VbCrLf &_
    " margin:0cm;"& VbCrLf &_
    " margin-bottom:.0001pt;"& VbCrLf &_
    " mso-pagination:widow-orphan;"& VbCrLf &_
    " font-size:12.0pt;"& VbCrLf &_
    " font-family:""Arial"";"& VbCrLf &_
    " mso-fareast-font-family:""Arial"";}"& VbCrLf &_
    "@page Section1"& VbCrLf &_
    " {size:595.3pt 841.9pt;"& VbCrLf &_
    " margin:0.85pt 0cm 0cm 0cm;"& VbCrLf &_
    " mso-header-margin:10.4pt;"& VbCrLf &_
    " mso-footer-margin:10.4pt;"& VbCrLf &_
    " mso-paper-source:0;}"& VbCrLf &_
    "div.Section1"& VbCrLf &_
    " {page:Section1;}"& VbCrLf &_
    "-->"& VbCrLf &_
    "</style>"& VbCrLf &_
    "<!--[if gte mso 10]>"& VbCrLf &_
    "<style>"& VbCrLf &_
    " /* Style Definitions */"& VbCrLf &_
    " table.MsoNormalTable"& VbCrLf &_
    " {mso-style-name:""Tabella normale"";"& VbCrLf &_
    " mso-tstyle-rowband-size:0;"& VbCrLf &_
    " mso-tstyle-colband-size:0;"& VbCrLf &_
    " mso-style-noshow:yes;"& VbCrLf &_
    " mso-style-parent:"""";"& VbCrLf &_
    " mso-padding-alt:0cm 5.4pt 0cm 5.4pt;"& VbCrLf &_
    " mso-para-margin:0cm;"& VbCrLf &_
    " mso-para-margin-bottom:.0001pt;"& VbCrLf &_
    " mso-pagination:widow-orphan;"& VbCrLf &_
    " font-size:10.0pt;"& VbCrLf &_
    " font-family:""Arial"";"& VbCrLf &_
    " mso-ansi-language:#0400;"& VbCrLf &_
    " mso-fareast-language:#0400;"& VbCrLf &_
    " mso-bidi-language:#0400;}"& VbCrLf &_
    "table.MsoTableGrid"& VbCrLf &_
    " {mso-style-name:""Griglia tabella"";"& VbCrLf &_
    " mso-tstyle-rowband-size:0;"& VbCrLf &_
    " mso-tstyle-colband-size:0;"& VbCrLf &_
    " border:solid windowtext 1.0pt;"& VbCrLf &_
    " mso-border-alt:solid windowtext .5pt;"& VbCrLf &_
    " mso-padding-alt:0cm 5.4pt 0cm 5.4pt;"& VbCrLf &_
    " mso-border-insideh:.5pt solid windowtext;"& VbCrLf &_
    " mso-border-insidev:.5pt solid windowtext;"& VbCrLf &_
    " mso-para-margin:0cm;"& VbCrLf &_
    " mso-para-margin-bottom:.0001pt;"& VbCrLf &_
    " mso-pagination:widow-orphan;"& VbCrLf &_
    " font-size:10.0pt;"& VbCrLf &_
    " font-family:""Arial"";"& VbCrLf &_
    " mso-ansi-language:#0400;"& VbCrLf &_
    " mso-fareast-language:#0400;"& VbCrLf &_
    " mso-bidi-language:#0400;}"& VbCrLf &_
    "</style>"& VbCrLf &_
    "<![endif]-->"& VbCrLf &_
    "</head>"& VbCrLf & VbCrLf &_
    "<body lang=3DIT style=3D'tab-interval:35.4pt'>"& VbCrLf & VbCrLf &_
    "<div class=3DSection1>"& VbCrLf & VbCrLf &_
    "<p class=3DMsoNormal>Pagina 1 - Testo di esempio</p>"& VbCrLf & VbCrLf &_
    "</div>"& VbCrLf & VbCrLf &_
    "</body>"& VbCrLf & VbCrLf &_
    "</html>"

    si ottiene una pagina in cui è possibile settare i margini.... ma non è più possibile inserire l'immagine per l'intestazione e il piè di pagina.

    Potete darmi una mano per favore o quantomeno indicarmi un link o un tutorial dove ci sono spiegate le cose che mi servono?

    In asp sarebbe preferibile, altrimenti sono disponibile ad una eventuale migrazione in .Net.

    Resto in attesa,
    Grazie anticipatamente.

    Ale.
    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

  2. #2

    se può servire ....

    Se ti può essere utile io uso gli RTF.

    1. Prendo il .Doc Originale e lo Salvo come RTF.

    2. Poi metto al suo interno tra parentesi [] le etichette che saranno i risultati della query (es [RAGSOC] per la ragione sociale di un'azienda).

    3. Quindi lo apro con Notepad e lo salvo cone .TXT (controlla nel TXT che tutte le etichette siano correttamente [ETICHETTA], a volte si salva con dei TAG Word tipo [jghdfjkfgkjahsdf_jgksdahfgjhsgdETICHETTA]]) in quel caso basta che nel TXT sposti la quadra di sinistra e ri-salvi ...

    poi in una pagina ASP :

    codice:
       SQLQuery = "select RAGSOC from AZIENDA "	  
       Set GenTable = GenConn.Execute(SQLQuery) 
       if Not (GenTable.EOF and GenTable.BOF) then 
          GenTable.movefirst   
       end if				  
    
       dim FileName
       FileName = "nome_del_file_rtf.rtf" ' PUOI USARE UNO DEI CAMPI DELLA QUERY				   
    
     '  response.buffer = true 
       response.ContentType = "application/vnd.ms-word"    				   
       response.AddHeader "content-disposition", "inline; filename=" & FileName 						
       
       ' RICHIAMO LA ROUTINE CHE SOSTITUISCE LE LABEL TRA PARENTESI QUADRE CON I RISPETTIVI CAMPI
       ' ESTRATTI DALLA QUERY PER CREARE IL REPORT RTF				   			
       call sostituzione(testo,"nome_del_file_rtf_con_le_parentesi_quadre.txt")
    e questa è la routine sostituzione :

    codice:
    sub sostituzione(testo,nomefile) 
    	strPath = Server.Mappath("/path_del_file_TXT_con_le_parentesi_quadre/" & nomefile)
    	Set objFileSy = Server.CreateObject("Scripting.FileSystemObject")
    	Set objApriFile = objFileSy.OpenTextFile(strPath, 1)
    	' LEGGO IL FILE TXT CONTENENTE I TAG RTF ------------------------------------------------
    	testo=objApriFile.ReadAll
    	'----------------------------------------------------------------------------------------------------------------
    	' DIMENSIONO GLI ARRAY UTILIZZATI PER LE SOSTITUZIONI
    	dim posquadreaperte(30)
    	dim posquadrechiuse(30)				
    	dim sostituisci(30)
    									
    	'CERCA LE POSIZIONI DELLE PARENTESI QUADRE APERTE
    	counter=0
    	i=0
    	do
    	i=instr(i+1,testo,"[")
    	if i>0 then 
    	counter=counter+1
    	posquadreaperte(counter) = i
    	end if
    	loop until i=0
    	' FINE RICERCA
    	
    	'CERCA LE POSIZIONI DELLE PARENTESI QUADRE CHIUSE
    	counter=0
    	i=0
    	do
    	i=instr(i+1,testo,"]")
    	if i>0 then
    	counter=counter+1
    	posquadrechiuse(counter) = i
    	end if
    	loop until i=0
    	' FINE RICERCA
    	
    	'CARICA ARRAY DELLE SOSTITUZIONI
    	for i = 1 to counter 
    	lungh = posquadrechiuse(i) - posquadreaperte(i)
    	sostituisci(i)=mid(testo,posquadreaperte(i),lungh+1) 
    	next				
    	'FINE CARICAMENTO ARRAY
    	for i = 1 to counter 
    			nomecampo = mid(sostituisci(i),2,len(sostituisci(i))-2)
    			if GenTable(nomecampo) <> "" then
    				testo = replace(testo,sostituisci(i),formattastringa(GenTable(nomecampo)))					  					
    				else				
    				testo = replace(testo,sostituisci(i),"")				
    			end if
    	next
    
    	response.Write testo			
    
    	objApriFile.close
    	
    	Set objApriFile = Nothing
    	Set objFileSy = Nothing 				
    	
    end sub
    questa pagina in una finestra del browser si aprirà con Word (Apri-Salva).
    se devi salvare il file sul Server la richiami con Ajax e scrivi il contenuto in un file .RTF ...

    prova e poi fammi sapere
    Mi sono impigliato nella Rete....
    www.deejaymax.com

  3. #3
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536
    Ciao djmax, grazie per la risposta ed il codice.

    Lo provo, lo adatto alle mie esigenze e ti faccio sapere quanto prima,

    Grazie,

    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

  4. #4
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536
    djmax, complimenti per il codice!!!

    Ti devo chiedere ancora un piccolo aiuto ....

    Ho prelevato dal DB altri campi ed ho provato a visualizzarli, il risultato è che mi scrive solo il primo campo tante volte per quanto è il numero dei campi richiamati dal DB.

    Ti posto il codice:

    codice:
    
    <%
    
     SQLQuery = "SELECT Ana_RagioneSociale,Ana_Indirizzo FROM Anagrafica "	  
     
       Set GenTable = Con.Execute(SQLQuery) 
       if Not (GenTable.EOF and GenTable.BOF) then 
          GenTable.movefirst   
       end if				  
    
       dim FileName
       FileName = "isi.rtf" ' PUOI USARE UNO DEI CAMPI DELLA QUERY				   
    
     '  response.buffer = true 
       response.ContentType = "application/vnd.ms-word"    				   
       response.AddHeader "content-disposition", "inline; filename=" & FileName 						
       
       ' RICHIAMO LA ROUTINE CHE SOSTITUISCE LE LABEL TRA PARENTESI QUADRE CON I RISPETTIVI CAMPI
       ' ESTRATTI DALLA QUERY PER CREARE IL REPORT RTF				   			
       call sostituzione(testo,"ISI.txt")
    
    
    sub sostituzione(testo,nomefile) 
    	strPath = Server.Mappath("/Protocollo/2010/" & nomefile)
    	'response.Write(strPath)
    	'response.End()
    	Set objFileSy = Server.CreateObject("Scripting.FileSystemObject")
    	Set objApriFile = objFileSy.OpenTextFile(strPath, 1)
    	' LEGGO IL FILE TXT CONTENENTE I TAG RTF ------------------------------------------------
    	testo=objApriFile.ReadAll
    	'----------------------------------------------------------------------------------------------------------------
    	' DIMENSIONO GLI ARRAY UTILIZZATI PER LE SOSTITUZIONI
    	dim posquadreaperte(30)
    	dim posquadrechiuse(30)				
    	dim sostituisci(30)
    									
    	'CERCA LE POSIZIONI DELLE PARENTESI QUADRE APERTE
    	counter=0
    	i=0
    	do
    	i=instr(i+1,testo,"[")
    	if i>0 then 
    	counter=counter+1
    	posquadreaperte(counter) = i
    	end if
    	loop until i=0
    	' FINE RICERCA
    	
    	'CERCA LE POSIZIONI DELLE PARENTESI QUADRE CHIUSE
    	counter=0
    	i=0
    	do
    	i=instr(i+1,testo,"]")
    	if i>0 then
    	counter=counter+1
    	posquadrechiuse(counter) = i
    	end if
    	loop until i=0
    	' FINE RICERCA
    	
    	'CARICA ARRAY DELLE SOSTITUZIONI
    	for i = 1 to counter 
    	lungh = posquadrechiuse(i) - posquadreaperte(i)
    	sostituisci(i)=mid(testo,posquadreaperte(i),lungh+1) 
    	next				
    	'FINE CARICAMENTO ARRAY
    	for i = 1 to counter 
    	        
    			nomecampo = mid(sostituisci(i),2,len(sostituisci(i))-2)
    
    			if GenTable("Ana_RagioneSociale") <> "" then
    				testo = replace(testo,sostituisci(i),GenTable("Ana_RagioneSociale"))					  					
    				else				
    				testo = replace(testo,sostituisci(i),"")				
    			end if
    			
    		
    	next
        
    	
    	response.Write testo	
    
    	objApriFile.close
    	
    	Set objApriFile = Nothing
    	Set objFileSy = Nothing 				
    	
    end sub
    %>
    Grazie,
    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

  5. #5

    ...

    Nell'RTF hai messo sia [Ana_RagioneSociale] che [Ana_Indirizzo] ??
    Mi sono impigliato nella Rete....
    www.deejaymax.com

  6. #6
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536

    Re: ...

    Originariamente inviato da djmax73
    Nell'RTF hai messo sia [Ana_RagioneSociale] che [Ana_Indirizzo] ??
    Certamente ... ho provato a modificare anche il codice che mi hai postato ma nulla da fare ...

    codice:
    for i = 1 to counter 
    	lungh = posquadrechiuse(i) - posquadreaperte(i)
    	sostituisci(i)=mid(testo,posquadreaperte(i),lungh+1) 
    	next				
    	'FINE CARICAMENTO ARRAY
    	for i = 1 to counter 
    	        
    			nomecampo = mid(sostituisci(i),2,len(sostituisci(i))-2)
    
    			if GenTable("Ana_RagioneSociale") <> "" then
    				testo = replace(testo,sostituisci(i),GenTable("Ana_RagioneSociale"))					  					
    				else				
    				testo = replace(testo,sostituisci(i),"")				
    			end if
    			
    			if GenTable("Ana_Indirizzo") <> "" then
    				testo = replace(testo,sostituisci(i),GenTable("Ana_Indirizzo"))					  					
    				else				
    				testo = replace(testo,sostituisci(i),"")				
    			end if
    	next
    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

  7. #7
    il codice puoi lasciarlo così :

    codice:
    	'FINE CARICAMENTO ARRAY
    	for i = 1 to counter 
    			nomecampo = mid(sostituisci(i),2,len(sostituisci(i))-2)
    			if GenTable(nomecampo) <> "" then
    				testo = replace(testo,sostituisci(i),formattastringa(GenTable(nomecampo)))					  					
    				else				
    				testo = replace(testo,sostituisci(i),"")				
    			end if
    	next
    con nomecampo generico ....

    controlla che la query restituisca i campi giusti e che nel TXT siano correttamente scritti [NOMECAMPO] senza spazi o caratteri strani ...
    L'ho usato su molti files anche con 10-15 campi e funziona ...
    Mi sono impigliato nella Rete....
    www.deejaymax.com

  8. #8
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536
    Grande!!!!

    Ho provato e funziona,

    Potrei anche rendere i campi non modificabili? Se si, in che modo?

    Grazie 1000.
    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

  9. #9

    ...

    Se riesci a salvare il file RTF con word con le parti di testo etichetta in sola lettura si...
    ma non so se si possa fare ...
    Mi sono impigliato nella Rete....
    www.deejaymax.com

  10. #10
    Utente di HTML.it L'avatar di Dr Mal
    Registrato dal
    Apr 2002
    Messaggi
    2,536
    djmax, credo si possa bloccare il testo, l' ho visto fare ma questa è un' altra storia ... grazie davvero tanto per il prezioso aiuto che mi hai fornito, mi hai risolto una buona parte dei problemi!!!!

    Ciao,
    Ale.
    [Proteggiamo la Natura e gli Animali: appartengono alle cose più belle che ci sono state donate.]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.