Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 48

Discussione: Export > excel

  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733

    Export > excel

    Per quale motivo questo codice mi funziona su un sito e mi si pianta su un altro?
    codice:
       Protected Sub ExportToExcel(sender As Object, e As EventArgs)
          Dim nomefile = "ArticoliDisponibilita"
    
          Response.Clear()
          Response.Buffer = True
          Response.AddHeader("content-disposition", "attachment;filename=" & nomefile & ".xls")
          Response.Charset = ""
          Response.ContentType = "application/vnd.ms-excel"
          Using sw As New StringWriter()
             Dim hw As New HtmlTextWriter(sw)
             hw.WriteLine("<b>Disponibilità:</b>")
             Dim scritto = False
    
             Dim GV As GridView = gvarticoli
             If GV.Rows.Count > 1 Then
                rendergv(GV)
                GV.RenderControl(hw)
                scritto = True
             End If
             .......
    Si pianta sulla riga GV.RenderControl(hw) dicendo che il controllo Gridview deve essere inserito in un tag form con runat="server"... in rete vedo post datati 2006 con questo errore e parlano di un bug del gridview control, non credo siano applicabili....
    Il gridview ha solo BoundFields, non ha templatefields con controlli all'interno, è una griglia banale.
    L'unica differenza con la pagina in cui funziona è che in questa pagina il gridview è all'interno di una view di un controllo multiview (insieme al linkbutton da cui lancio la ExportToExcel)....
    What the hell?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733
    PS anche estratto dalla multiview da lo stesso problema...
    Ri-what the hell?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733
    ah no c'è un'altra differenza sostanziale: quella in cui funziona è una pagina aspx, questo in cui si pianta invece è uno usercontrol
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,105
    non so. Magari provo dopo a casa.
    Ma hai mai preso in considerazione la possibilità di usare la libreria npoi?
    https://www.nuget.org/packages/NPOI/

    io mi ci trovo veramente bene
    Pietro

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733
    non conosco... io devo creare al volo un file excel con i dati contenuti in una gridview contenuta in uno usercontrol: se mi dici che lo fa gli do un'occhiata
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733
    Nel frattempo ho trovato che (dicono) disabilitando qualcosa sulla pagina che ospita lo usercontrol l'errore sparisce:
    codice:
    Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
    End Sub
    In effetti l'errore non si presenta più ma non fa neanche nessuna estrazione in xls in debug vedo che fa tutto quello che deve fare ma poi non crea nessun file, o almeno il fatto di lanciare questa cosa dallo UC fa sì che il browser non mi ci porta/non me lo fa scaricare...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,801
    puoi provare a mettere questo nello UC ?

    codice:
    public override void VerifyRenderingInServerForm(Control control)
    {
        //
    }

    edit: lo avevi già trovato, ok

    ti posto un mio esempio che funzionava, che importava da un XLS, permetteva di riesportarlo e faceva anche la Bulk nel DB (devo trovarlo e lo posto)
    Ultima modifica di djciko; 20-10-2020 a 02:39

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,733
    Allora ho capito che tutti i mie problemi derivano dal fatto che sono in uno usercontrol.
    Ho installato e testato NPOI e riesco a creare fisicamente il file xls sul server... now ho il problema di proporlo all'utente per il download e qui sbatto le corna perchè non riesco a far partire un window.open dal codebehind dello UC.
    Ci ho provato senza successo con
    Page.ClientScript.RegisterClientScriptBlock
    e con
    Page.ClientScript.RegisterStartupScript
    ...e ora non so in che altro modo dirglielo.

    codice:
       Protected Sub makexls()
          Dim workbook = New HSSFWorkbook()
          Dim nomefile As String = "Disponibilita_" & Now.ToString("yyyyMMdd_HHmmss") & ".xls"
          Dim sheet = workbook.CreateSheet("Disponibilità al " & Now.ToString("dd_MM_yyyy"))
          ' Add header labels
          Dim rowIndex = 0
          Dim Row = sheet.CreateRow(rowIndex)
          Row.CreateCell(0).SetCellValue("Articolo")
          Row.CreateCell(1).SetCellValue("Descrizione")
          Row.CreateCell(2).SetCellValue("UM")
          Row.CreateCell(3).SetCellValue("Disponibilità")
          rowIndex += 1
          'ciclo per aggiungere righe
          .......
          'salvo file locale
          Dim filename As String = ConfigurationManager.AppSettings("docpath") & nomefile
          Dim filedata As FileStream = New FileStream(filename, FileMode.Create)
          workbook.Write(filedata)
          'pagina download
          Dim strcode= "window.open('/downloader.aspx?lnk=" & nomefile & "');"
          Page.ClientScript.RegisterStartupScript(Me.GetType(), "MyScript", strcode, True)
    
       End Sub
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,801
    Allora ho capito che tutti i mie problemi derivano dal fatto che sono in uno usercontrol




    e te pareva. mai una pagina lineare tu eh ?

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,801
    L'esempio (senza UC) si appoggia ad una cartella che si chiama "Upload_Files", contenuta in un'altra che si chiama
    "XLSB_Read_Bulk_Export" che sta nella root della solution.




    aspx:
    codice:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IncredibileBulk.aspx.cs" Inherits="IncredibileBulk" %>
    
    
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>XLSB / Bulk</title>
    </head>
    <body style="background-color: #fffff0">
        <form id="form1" runat="server">
            <div>
                <div style="font-style: italic; color: black;">
                    <h1>1. Upload // 2. Lettura XLS // 3. SqlBulkCopy in tabella</h1>
                </div>
    
    
                <hr />
                <h2>Seleziona il file XLS sorgente:</h2>
                <asp:FileUpload ID="fupXLS" runat="server" ToolTip="Carica File XLS" />
                &nbsp;<asp:Button ID="btUpload" runat="server" Text="Upload al server" OnClick="btUpload_Click" />
    
    
                <asp:Label ID="lb" runat="server" Font-Size="Large" Font-Bold="true"></asp:Label>
                <br />
                <br />
                <br />
    
    
    
    
                <hr />
                <div align="center">
                    <asp:Button BorderStyle="Solid" Width="130px" Height="50px" ID="btReadXLSB" runat="server" Text="Leggi File XLS" OnClick="btReadXLSB_Click" />
                    <br />
                    <asp:Label ID="lbSelectXSLB" runat="server" Font-Size="Medium" Font-Bold="true"></asp:Label>
                    <br />
                    <br />
    
    
                    <asp:GridView GridLines="Both" Width="50%" ID="gv" runat="server"
                        BackColor="White" BorderColor="#000" BorderStyle="None" BorderWidth="1px" CellPadding="3">
                        <FooterStyle BackColor="White" ForeColor="#000066" />
                        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
                        <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
                        <RowStyle ForeColor="#000066" />
                        <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                        <SortedAscendingCellStyle BackColor="#F1F1F1" />
                        <SortedAscendingHeaderStyle BackColor="#007DBB" />
                        <SortedDescendingCellStyle BackColor="#CAC9C9" />
                        <SortedDescendingHeaderStyle BackColor="#00547E" />
                        <AlternatingRowStyle BackColor="LightGray" />
                    </asp:GridView>
                    <br />
    
    
    
    
                    <asp:Button ID="btDownloadXLS" BorderStyle="Solid" Width="130px" Height="50px" runat="server" Text="Scarica XLS" OnClick="btDownloadXLS_Click" />
    
    
    
    
                    &nbsp;&nbsp;&nbsp;
                    <asp:Button ID="btBulk" runat="server" Text="BulkCopy !" OnClick="btBulk_Click" BorderStyle="Solid" Width="130px" Height="50px" /><br />
                    <br />
                    <br />
                </div>
            </div>
        </form>
    </body>
    </html>





    C#
    codice:
    using System;
    using System.Data;
    using System.Linq;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using ToolsLibrary.nsDatabaseLibrary;
    using System.IO;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    
    
        
    public partial class IncredibileBulk : System.Web.UI.Page
    {
    	private OleDbConnection internal_SQLCONN;
    	private OleDbDataAdapter internal_SQLADAPTER;
    	private DataSet internal_DATASET;
    
    
    
    
    	protected void Page_Load(object sender, EventArgs e)
    	{
    		if (!IsPostBack)
    		{
    			btUpload.Enabled = true; // per upload del file 
    			fupXLS.Enabled = true;   // per upload del file
    
    
    			btDownloadXLS.Visible = false;  // per scaricare il file 
    
    
    			btBulk.Visible = false;
    			btReadXLSB.Enabled = false; // per leggere il file 
    
    
    			lb.Text = String.Empty;
    			lbSelectXSLB.Text = String.Empty;
    
    
    			string js = "if(!confirm('Questa operazione copierà il foglio XLS sulla tabella SQLServer. Continuare ?')) return false;";
    			btBulk.Attributes.Add("OnClick", js);
    		}
    	}
    
    
    
    
    
    
    	protected void btUpload_Click(object sender, EventArgs e)
    	{
    		// Percorso applicazione RestInPeace
    		string percorsoApplicazione = AppDomain.CurrentDomain.BaseDirectory.ToString();
    
    
    		// La cartella deve avere i permessi di scrittura per "Everyone"
    		String pathSalvataggio = percorsoApplicazione + "XLSB_Read_Bulk_Export\\RepositoryUpload";
    
    
    		if (fupXLS.HasFile)
    		{
    			String nomeFile = fupXLS.FileName;
    			pathSalvataggio += "\\" + nomeFile; // concatena il nome file 
    
    
    			Session["FileName"] = nomeFile;
    
    
    			bool tipoFileOK = true; // todo:: controllare con il mime
    
    
    			if (tipoFileOK == true) // dovra' essere a true
    			{
    				try
    				{
    					fupXLS.SaveAs(pathSalvataggio);
    					lb.Text = "&nbsp;&nbsp;&nbsp;UPLOAD OK !";
    
    
    					btReadXLSB.Enabled = true;
    					btUpload.Enabled = false;
    					fupXLS.Enabled = false;
    				}
    				catch (Exception ex)
    				{
    					throw ex;
    				}
    			}
    		}
    	}
    
    
    
    
    
    
    	// load del foglio xls
    	protected void btReadXLSB_Click(object sender, EventArgs e)
    	{
    		// Percorso applicazione 
    		string percorsoApplicazione = AppDomain.CurrentDomain.BaseDirectory.ToString();
    
    
    		// La cartella deve avere i permessi di scrittura per "Everyone"
    		String pathSalvataggio = percorsoApplicazione + "XLSB_Read_Bulk_Export\\RepositoryUpload\\" + Session["FileName"].ToString();
    		Session.Remove("FileName");
    
    
    
    
    	  
    		try
    		{
    			// Connessione
    			try
    			{
    				internal_SQLCONN = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ pathSalvataggio + ";Mode=Share Deny None;Extended Properties='Excel 12.0 Xml;HDR=YES;ReadOnly=False;IMEX=1'");      
    				internal_SQLCONN.Open();
    			}
    			catch (OleDbException ex)
    			{
    				internal_SQLCONN.Close();
    				throw ex;
    			}
    			catch (Exception ex)
    			{
    				internal_SQLCONN.Close();
    				throw ex;
    			}
    
    
    
    
    			internal_DATASET = new DataSet();
    			internal_SQLADAPTER = new OleDbDataAdapter("SELECT * FROM [foglio1$]", internal_SQLCONN); // Select dal <Foglio1> del file Excel
    
    
    			try
    			{
    				internal_SQLADAPTER.Fill(internal_DATASET);
    				btReadXLSB.Enabled = false;
    			}
    			catch (OleDbException ex)
    			{
    				throw ex;
    			}
    			finally
    			{
    				internal_SQLCONN.Close();
    			}
    
    
    			gv.DataSource = internal_DATASET.Tables[0]; 
    			gv.DataBind();
    
    
    
    
    			// Aggiunta in sessione del set di dati
    			Session.Add("dt_BulkSource", internal_DATASET.Tables[0]);
    
    
    
    
    			//btDownloadXLS.Visible = true;
    			btBulk.Visible = true;
    		}
    		catch (Exception exx)
    		{
    			throw exx;
    		}
    	}
    
    
    
    
    
    
    	// INCREDIBILE BULK
    	protected void btBulk_Click(object sender, EventArgs e)
    	{
    		DataTable dt1 = (DataTable)Session["dt_BulkSource"];
    		Session.Remove("dt_BulkSource");
    
    
    
    
    		//CARICAMENTO su SQL Server
    		string connstring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["STUDIO2O15ConnectionString"].ConnectionString;
    
    
    
    
    		using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connstring))
    		{
    			bulkCopy.DestinationTableName = "dbo.[TB_XLSB]";
    
    
    			try
    			{
    				// Da sorgente XLS a destinazione SQLServer 
    				bulkCopy.WriteToServer(dt1);
    				
    
    
    				// Reset ============================
    				gv.DataSource = null;
    				gv.DataBind();
    
    
    				btDownloadXLS.Visible = false;
    				btBulk.Visible = false;
    				lb.Text = String.Empty;
    				// ==================================
    
    
    
    
    				ToolsLibrary.nsScriptLibrary.ScriptLibrary.Alert(this, "XLS copiato su SQL Server.");
    
    
    				// reset
    				btUpload.Enabled = true; // per upload del file XLSB
    				fupXLS.Enabled = true;   // per upload del file XLSB
    
    
    				btBulk.Visible = false;
    				btReadXLSB.Enabled = false; // per leggere il file XLSB
    
    
    				lb.Text = String.Empty;
    				lbSelectXSLB.Text = String.Empty;
    			}
    			catch (Exception ex)
    			{
    				ToolsLibrary.nsScriptLibrary.ScriptLibrary.Alert(this, ex.Message);
    			}
    			finally
    			{
    				bulkCopy.Close();
    			}
    		}
    	}
    
    
    
    
    	// verifica che il gridview sia renderizzato
    	public override void VerifyRenderingInServerForm(Control control)
    	{
    		//
    	}
    
    
    
    
    
    
    	// Download della grid
    	protected void btDownloadXLS_Click(object sender, EventArgs e)
    	{
    		Response.ClearContent();
    		Response.AppendHeader("content-disposition", "attachment;filename=EXPORT.xls");
    		Response.ContentType = "application/excel";
    
    
    		StringWriter stringwriter = new StringWriter();
    		HtmlTextWriter htmtextwriter = new HtmlTextWriter(stringwriter);
    
    
    		gv.HeaderRow.Style.Add("background-color", "#006699");
    
    
    		foreach (GridViewRow gridviewrow in gv.Rows)
    		{
    			gridviewrow.BackColor = System.Drawing.Color.White;
    			foreach (TableCell gridviewrowtablecell in gridviewrow.Cells)
    			{
    				gridviewrowtablecell.Style["background-color"] = "#ffffff";
    			}
    		}
    
    
    		gv.RenderControl(htmtextwriter);
    		Response.Write(stringwriter.ToString());
    		Response.End();
    	}
    }







    Sono 3 step:
    - upload
    - leggi xls
    - esporta (se vuoi) di nuovo l'xls
    - dai la cera
    - togli la cera
    - fai la bulk nel db

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 © 2020 vBulletin Solutions, Inc. All rights reserved.