23 messaggi dal 06 marzo 2008
Un saluto a tutti, ho pubblicato una'applicazione Web su aruba in cui in una pagina richiedo un report su excel di dati persistenti su sqlserver, in locale non ho problemi in quanto sulla mia macchina ho installato Ms Office 2007 e sul progetto sviluppato con Visual Studio 2015 in C# ho aggiunto il riferimento all'estensione Microsoft.Office.Interop.Excel 14.0.0.0 non riesco a capire l'errore generato su Aruba.it ... ecco il codice

protected void BtnEsporta_Click(object sender, ImageClickEventArgs e)
{

Microsoft.Office.Interop.Excel.Application app;
_Workbook wB;
_Worksheet foglio;
v =(int[]) ViewState["v"];
using (QuestDataContext qx = new QuestDataContext())
{

var dmdQuest = from dmd in qx.Domande
join comp in qx.Composizione on dmd.id_Dmd equals comp.id_Dmd
join quest in qx.Questionari on comp.id_Quest equals quest.id_Quest
where quest.id_Quest == v[DDLQuest.SelectedIndex]
select new {comp.id_Composiz, comp.numdmd, dmd.domanda,dmd.tipo };

var selPart = from part in qx.Partecipanti
where part.id_Quest == v[DDLQuest.SelectedIndex]
where part.svolto == true
select part;




try
{



app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = true;
wB = (_Workbook)(app.Workbooks.Add(Missing.Value));
foglio = (_Worksheet)wB.ActiveSheet;
foglio.Name = DDLQuest.SelectedValue;



foglio.get_Range("a1", "z1").ColumnWidth = 8;
int x = 1;
foreach (var dmd in dmdQuest)
{
StringBuilder s = new StringBuilder();
StringBuilder z = new StringBuilder();
char c = (char)(64 + x);
s.Append(c);
s.Append(1);
z.Append(c);
z.Append(5);
foglio.get_Range(s.ToString(),z.ToString()).Merge();
foglio.get_Range(s.ToString(), z.ToString()).HorizontalAlignment = XlHAlign.xlHAlignCenter;
foglio.get_Range(s.ToString(), z.ToString()).Font.Bold = true;
foglio.get_Range(s.ToString(), z.ToString()).VerticalAlignment =
XlVAlign.xlVAlignCenter;
foglio.get_Range(s.ToString(), z.ToString()).ColumnWidth = 11;
foglio.get_Range(s.ToString(), z.ToString()).RowHeight = 45;
foglio.get_Range(s.ToString(), z.ToString()).Orientation = 90;
foglio.get_Range(s.ToString(), z.ToString()).Borders.LineStyle = XlLineStyle.xlDouble;
foglio.get_Range(s.ToString(), z.ToString()).Value = dmd.domanda ;
foglio.Range[s.ToString()].WrapText = true;

x++;
}




foglio.get_Range("a6", "z2000").HorizontalAlignment = XlHAlign.xlHAlignCenter;
foglio.get_Range("A6", "z2000").Font.Bold = true;
foglio.get_Range("A6", "z2000").VerticalAlignment =
XlVAlign.xlVAlignCenter;
int ix = 6;

foreach (Partecipanti part in selPart)
{
var risposte = from ris in qx.Risposte
join comp in qx.Composizione on ris.id_Composiz equals comp.id_Composiz
join dmd in qx.Domande on comp.id_Dmd equals dmd.id_Dmd
where ris.id_Partecipante == part.id_Partecipante
select new { dmd.id_Dmd, dmd.domanda, ris.tipo, ris.voto, ris.SiNo, ris.aperta };
int j = 1;

foreach (var rx in risposte)
{


switch (rx.tipo)
{
case 1:
foglio.Cells[ix, j] = rx.voto;
break;
case 2:
foglio.Cells[ix, j] = rx.SiNo;
break;
case 3:
foglio.Cells[ix, j] = rx.aperta;
break;
}
j++;
}
if (chkAnonimo.Checked == false)
{
foglio.Cells[ix, j++] = part.cognome;
foglio.Cells[ix, j++] = part.nome;
foglio.Cells[ix, j] = (part.classe != null) ? part.classe : "";
}
ix++;

}
}

catch (Exception ex)
{

}
}
}
Modificato da luigi.marano il 25 aprile 2016 22.15 -
51 messaggi dal 21 novembre 2014
Ciao
I server di Aruba non hanno installato le librerie di Office, quindi non puoi usare quel codice che hai scritto.
Per poter usare Excel e Word io ho usato queste librerie:
- docx.dll per stampare e creare fogli Word (.docx)
- npoi.dll per stampare e creare fogli Excel (.xlsx)
Sono entrambi funzionati su Aruba (li ho testati lì sopra)

Ciao.
23 messaggi dal 06 marzo 2008
Grazie, quindi aggiungo il riferimento a quella libreria che trovo tra le estensioni su VS ...il codice come cambia?
51 messaggi dal 21 novembre 2014
Non so se è presente tra le estensioni di visual studio. Io la dll per i docx e per xlsx l'ho scaricata da qui:
https://docx.codeplex.com/
https://npoi.codeplex.com/releases
Li trovi anche la relativa documentazione con parecchi esempi.
23 messaggi dal 06 marzo 2008
Grazie, ho scaricato la libreria e gli esempi, mi sembrano chiari ed esaustivi,fatti su applicazione console penso che dovrò sostituire all'oggetto Filestream degli esempi l'oggetto Response di Asp.net.
51 messaggi dal 21 novembre 2014
Si esatto proprio cosi.
23 messaggi dal 06 marzo 2008
Purtroppo dopo vari tentativi,tutti negativi, non riesco a fare il download Excel dei risultati con l'uso di NPOI.dll, anche qui in locale funziona meravigliosamente, ma su Aruba mi da' errore, posto la parte saliente del codice :
try
{
InitializeWorkbook();
Sheet sheet1 = hssfworkbook.CreateSheet(DDLQuest.SelectedValue);
sheet1.CreateRow(0).CreateCell(0).SetCellValue("Pubblicazione Risultati del Questionario "+DDLQuest.SelectedValue);
Row row = sheet1.CreateRow(1);
int x = 1;
foreach (var dmd in dmdQuest)
{
StringBuilder riga = new StringBuilder();
riga.Append(dmd.domanda);
row.CreateCell(x).SetCellValue(riga.ToString());
x++;
}
int ix = 2;
foreach (Partecipanti part in selPart)
{
var risposte = from ris in qx.Risposte
join comp in qx.Composizione on ris.id_Composiz equals comp.id_Composiz
join dmd in qx.Domande on comp.id_Dmd equals dmd.id_Dmd
where ris.id_Partecipante == part.id_Partecipante
select new { dmd.id_Dmd, dmd.domanda, ris.tipo, ris.voto, ris.SiNo, ris.aperta };
int j = 1;
row = sheet1.CreateRow(ix);
foreach (var rx in risposte)
{


switch (rx.tipo)
{
case 1:
row.CreateCell(j).SetCellValue(rx.voto.ToString());
break;
case 2:
row.CreateCell(j).SetCellValue(rx.SiNo.ToString());
break;
case 3:
row.CreateCell(j).SetCellValue(rx.aperta.ToString());
break;
}
j++;
}
if (chkAnonimo.Checked == false)
{
row.CreateCell(j++).SetCellValue(part.cognome);

row.CreateCell(j++).SetCellValue(part.nome);
string cl = (part.classe != null) ? part.classe : "";
row.CreateCell(j).SetCellValue(cl);

}
ix++;
}
string filename = "Excel" + DDLQuest.SelectedValue + ".xls";
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", filename));
Response.Clear();
Response.BinaryWrite(WriteToStream().GetBuffer());
Response.End();
}

catch (Exception ex)
{

}
}
}

void InitializeWorkbook()
{
hssfworkbook = new HSSFWorkbook();

////create a entry of DocumentSummaryInformation
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "NPOI Team";
hssfworkbook.DocumentSummaryInformation = dsi;

////create a entry of SummaryInformation
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Subject = "NPOI SDK Example";
hssfworkbook.SummaryInformation = si;
}


MemoryStream WriteToStream()
{
//Write the stream data of workbook to the root directory
MemoryStream file = new MemoryStream();
hssfworkbook.Write(file);
return file;
}
23 messaggi dal 06 marzo 2008
Risolto ...funziona benissimo NPOI.dll 2.1.3.1 dll contenute nella cartella dotnet4 Grazie ancora a pulejump!!

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.