89 messaggi dal 09 agosto 2001
Salve a tutti avrei la necessità di creare un file excel a partire da un file XML
in un Web Application
Va tutto bene fino a che faccio il file XML e lo popolo il problema nasce quando tento d'inserire un'immagine
Infatti non riesco a far apparire l'immagine
Dopo varie riecerche sono arrivato a scrivere questo pezzo all'interno del mio XML

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">

<xdr:twoCellAnchor>
<xdr:from>
<xdr:col>1</xdr:col>
<xdr:colOff>447675</xdr:colOff>
<xdr:row>1</xdr:row>
<xdr:rowOff>28575</xdr:rowOff>
</xdr:from>

<xdr:to>
<xdr:col>5</xdr:col>
<xdr:colOff>466725</xdr:colOff>
<xdr:row>14</xdr:row>
<xdr:rowOff>9525</xdr:rowOff>
</xdr:to>

<xdr:pic>
<xdr:nvPicPr>
<xdr:cNvPr id="1025" name="Altova.jpg" descr="logo"/>
<xdr:cNvPicPr>
<a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
</xdr:cNvPicPr>
</xdr:nvPicPr>

<xdr:blipFill>
<a:blip xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:embed="rId1"/>
<a:srcRect/>
<a:stretch>
<a:fillRect/>
</a:stretch>
</xdr:blipFill>

<xdr:spPr bwMode="auto">
<a:xfrm>
<a:off x="1228725" y="514350"/>
<a:ext cx="1266825" cy="552450"/>
</a:xfrm>

<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>

<a:noFill/>

</xdr:spPr>
</xdr:pic>
<xdr:clientData/>
</xdr:twoCellAnchor>

Ora all'interno del mio WorkSheet vorrei mostrare l'immagine ma proprio non ci riesco e non solo vorrei rendere l'immagine dinamica

Massimiliano Mascherin
301 messaggi dal 31 maggio 2006
ciao
prova a salvare da excel un foglio con img in formato xml, a questo punto apriti con un editor di testo il file xml è guarda come excel ha codificato in xml il foglio. Tieni presente però che sicuramente l'img dovrà essere inglobata come testo, quindi sarà codificata in Base32 o altro.

Ho fatto la stessa prova anche io, ma poi ho desistito perchè la codifica xml di un foglio excel è molto complessa.

Potresti tentare con il formato xlsx (che in realtà è una cartella zippata), dentro trovi separati dati, grafica e layout.
89 messaggi dal 09 agosto 2001
Ciao GGHI grazie per la risposta ma non funziona in quanto il formato XML di excel 2003 non supporta le immagini che vengono escluse.
La soluzione che ho trovato è stata quella di creare un file come se fosse una normale pagina HTML con una tabella con i sui TR, TD ed ovviamente l'IMG del caso, con tutti gli Style definiti come in un normale CSS e poi sfruttando il ContentType di Excel visualizzo direttamente il foglio excel.
In realtà l'immagine è sul server e quindi se salvo in locale il file perdo l'immagine ma per il mio scopo è sufficiente così.

Ecco il file che ho utilizzato come template per preparare i dati
<html
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="ProgId" content="Excel.Sheet">
<meta name="Generator" content="Microsoft Excel 9">
<!--[if gte mso 9]>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Sheet1</x:Name>
<x:WorksheetOptions>
<x:Selected/>
<x:ProtectContents>False</x:ProtectContents>
<x:ProtectObjects>False</x:ProtectObjects>
<x:ProtectScenarios>False</x:ProtectScenarios>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
<x:ProtectStructure>False</x:ProtectStructure>
<x:ProtectWindows>False</x:ProtectWindows>
</x:ExcelWorkbook>
</xml>
<![endif]-->
<style>
....
</style>
</head>
<body>
<Table>
<TR height="8">
<td colspan="5">
<td>
{LogoImg}
</td>
</tr>
...
</body>
</html>

poi da codice sostituisco con un semplice replace il {LogoImg} e tutti gli elementi che devo variare nel foglio excel

Builder.Replace("{LogoImg}", "<img src=\"" + HttpContext.Current.Server.MapPath("~/Images/logo.JPG") + "\">");

E per finire mostro il tutto

context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AddHeader("content-disposition", "attachment;filename=export.xls");
string data = (string)context.Cache[dataKey];


context.Response.Write(data);

Tieni conto che al posto di data ci va tutto il contenuto del file che ho usato come template (il primo pezzo) dove con vari Replace ho sostituito i vari elementi variabili del foglio excel che volevo mostrare

se serve sono a disposizione per ulteriori chiarimente



Massimiliano Mascherin
301 messaggi dal 31 maggio 2006
Ciao
uso lo stesso metodo anche io (file html con tabelle), per risolvere il problema con le immagini, invece che un file in formato html ho usato un file in formato mht, che è un formato html con inglobate le immagini, il content-type è sempre excel, lo stesso metodo lo uso anche con word. Per risolvere il problema img con il tuo metodo, invece che un link al file mappando il file sulla cartella locale, metti un riferimento http:/miosito/Images/logo.JPG, funziona se quando apri il file sei collegato a internet. Un'altra cosa usa le trasformazioni xslt per generare il file html, sono molto più performanti delle sostituzioni e/o replace

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.