+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

Creazione unico file excel.

  1. #1
    therock979 Guest
    Ciao ragazzi sto impazzendo. Dopo aver elaborato dei file excel ed aver aggiunto una riga presa da un foglio xml , salvo ogni singolo file dopo averlo creato. Il problema è che devo salvare tutto in un unico file accodando i risultati del nuovo file a quelli del vecchio. Purtroppo sono limitato alle librerie excel per questioni legate al server.
    In pratica il problema è che facendo nel modo in cui ho postato mi elaboro e mi riscrivo un file excel nuovo per ogni file elaborato.
    Mentre devo creare un file unico ed accodare tutte le nuove elaborazioni nello stesso file. grazie per gli eventuali suggerimenti. Grazie mille.

     public class RecordExcel
            {
    
                public string NumeroContratto { set; get; }
                public string CodiceCliente { set; get; }
                public string ImportoTassa { set; get; }
                public string CostoEsazione { set; get; }
                public string CostoContratto { set; get; }
                public string Spese { set; get; }
                public string Targa { set; get; }
                public string Servizi { set; get; }
                public string Sconto { set; get; }
                public string Commissioni { set; get; }
                public string Totale { set; get; }
    
            }
     private void AvviaGenerazioneReports()
            {
             
                DataTable TabellaDati = GetTable();
    
                foreach (DataRow rigo in TabellaDati.Rows)
                {
                    string PROV = rigo["AC"].ToString();
                    string NomeFileExcel = rigo["Stampa"].ToString();
                    string NomeFileXML = rigo["NomeRIDProdotto"].ToString();
                    string NomeFoglioDati = NomeFileExcel.Replace(".xlsx", "").Replace(".xls", "");
    
                    GeneraExcel(PROV, NomeFileExcel, NomeFileXML, NomeFoglioDati);
    
                }
            }
    
            private void GeneraExcel(string Provincia, string NomeFileExcel, string NomeFileXML, string NomeFoglioDati)
            {
                // ExportToExcel(GridView1, "ExportedUserDetail");
                string prov = Provincia;
                string PERCORSO = Classi.Costanti.PercorsoCartellaReport;
               // string PERCORSOxml = Classi.Costanti.PercorsoCartellaXML;
                string filename = PERCORSO + "/" + prov + "/" + NomeFileExcel;
                ViewState["file"] = NomeFileExcel;
                //Leggo id dall'Excel
                var ElencoRecords = getDatiExcel(filename);
                //Genero il nuovo file Excel
                SalvaDatiNuovoExcel (ElencoRecords, PERCORSO, prov, NomeFileXML, filename);
              
            }
            private void SalvaDatiNuovoExcel(List <RecordExcel> ElencoRecords,string PERCORSO, string  prov,string  NomeFileXML, string filename)
            {
                string PercorsoXML = Classi.Costanti.PercorsoCartellaXML+"/"+prov+"/"+NomeFileXML;
                
                Microsoft.Office.Interop.Excel._Application oApp;
                Microsoft.Office.Interop.Excel._Worksheet oSheet;
                Microsoft.Office.Interop.Excel._Workbook oBook;
                
                oApp = new Microsoft.Office.Interop.Excel.Application();
                oBook = oApp.Workbooks.Add(true);
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oBook.Worksheets.get_Item(1)
    
                    oSheet.Cells[1, 1] = "Contratto numero";
                    oSheet.Cells[1, 2] = "Codice Cliente / RIF  Bancario";
                    oSheet.Cells[1, 3] = "Targa";
                    oSheet.Cells[1, 4] = "Tassa";
                    oSheet.Cells[1, 5] = "Costo contratto";
                    oSheet.Cells[1, 6] = "Spese";
                    oSheet.Cells[1, 7] = "Commisioni";
                    oSheet.Cells[1, 8] = "Servizi";
                    oSheet.Cells[1, 9] = "Sconti";
                    oSheet.Cells[1, 10] = "Totale";
                    oSheet.Cells[1, 11] = "RID effettuato";
                    
                    int Indice = 2;
                    foreach (RecordExcel record in ElencoRecords)
                    {
                      
                        oSheet.Cells[Indice, 1] = record.NumeroContratto;
                        oSheet.Cells[Indice, 2] = record.CodiceCliente;
                        oSheet.Cells[Indice, 3] = record.Targa;
                        oSheet.Cells[Indice, 4] = record.ImportoTassa;
                        oSheet.Cells[Indice, 5] = record.CostoContratto;
                        oSheet.Cells[Indice, 6] = record.Spese;
                        oSheet.Cells[Indice, 7] = record.Commissioni;
                        oSheet.Cells[Indice, 8] = record.Servizi;
                        oSheet.Cells[Indice, 9] = record.Sconto;
                        oSheet.Cells[Indice, 10] = record.Totale;
    
                        oSheet.Cells[Indice, 11] = ImportoXML(PercorsoXML, record.CodiceCliente);
                        Indice++;
                    }
                }
              
                
                 if (oApp.Application.Sheets.Count < 1)
                {
    
                    oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oBook.Worksheets.Add("", "", "", "");
                }
                else
                {
                    oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oApp.Worksheets[1];
                }
               
                string PercorsoFileElaborato = string.Format ("{0}_{1}.xls", filename.Replace (".xlsx", "").Replace (".xls", ""),Guid.NewGuid());
                oBook.SaveAs(PercorsoFileElaborato, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
                    false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                oBook.Close(true, null, null);
                oApp.Quit();
                //////
            }
    

  2. #2
    therock979 Guest
    Ho trovato il codice che potrebbe servirmi ma non riesco ad adattarla in quanto i file li salvo erroneamente uno alla volta e quindi non posso passargli un path definitivo come l'esempio in questione.
    Ovvero non salvare tanti file come ho fatto ma uno unico che accoda uno alla volta tutte le elaborazioni dell'excel.
    Per favore potete indirizzarmi verso una soluzione corretta?


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using Microsoft.Office.Interop.Excel;
    using System.IO;
    using Excel = Microsoft.Office.Interop.Excel;
    
    namespace ConsoleApplication3
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                
                //E is the sign of the table width(M is the last column in the Excel file), 2 means the table height
                MergeExcel.DoMerge(new string[] 
                {
                    @"D:\Test Files\ConsoleApplication3\ConsoleApplication3\merge1.xlsx", 
                    @"D:\Test Files\ConsoleApplication3\ConsoleApplication3\merge2.xlsx"
                },
                    @"D:\Test Files\ConsoleApplication3\ConsoleApplication3\result.xlsx", "E", 2);
            }
        }
        
        //Merge multiple Excel files that have the same structure
        public class MergeExcel
        {
            Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
            
            //initialize the object of saved target 
            Excel.Workbook bookDest = null;
            Excel.Worksheet sheetDest = null;
            
            //initialize the object of read data
            Excel.Workbook bookSource = null;
            Excel.Worksheet sheetSource = null;
            string[] _sourceFiles = null;
            string _destFile = string.Empty;
            string _columnEnd = string.Empty;
            int _headerRowCount = 0;
            int _currentRowCount = 0;
            public MergeExcel(string[] sourceFiles, string destFile, string columnEnd, int headerRowCount)
            {
                
                //Use class Missing case to indicate the missing value. e.g. when you call the method that has default parameter value
                bookDest = (Excel.WorkbookClass)app.Workbooks.Add(Missing.Value);
                sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Excel.Worksheet;
                sheetDest.Name = "Data";
                _sourceFiles = sourceFiles;
                _destFile = destFile;
                _columnEnd = columnEnd;
                _headerRowCount = headerRowCount;
            }
            
            //open worksheet
            void OpenBook(string fileName)
            {
                bookSource = app.Workbooks._Open(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                sheetSource = bookSource.Worksheets[1] as Excel.Worksheet;
            }
            
            //close worksheet
            void CloseBook()
            {
                bookSource.Close(false, Missing.Value, Missing.Value);
            }
            
            //copy table header
            void CopyHeader()
            {
                Excel.Range range = sheetSource.get_Range("A1", _columnEnd + _headerRowCount.ToString());
                range.Copy(sheetDest.get_Range("A1", Missing.Value));
                _currentRowCount += _headerRowCount;
            }
            
            //copy data
            void CopyData()
            {
                int sheetRowCount = sheetSource.UsedRange.Rows.Count;
                Excel.Range range = sheetSource.get_Range(string.Format("A{0}", _headerRowCount), _columnEnd + sheetRowCount.ToString());
                range.Copy(sheetDest.get_Range(string.Format("A{0}", _currentRowCount), Missing.Value));
                _currentRowCount += range.Rows.Count;
            }
            
            //save the result
            void Save()
            {
                bookDest.Saved = true;
                bookDest.SaveCopyAs(_destFile);
            }
            
            //exit the process
            void Quit()
            {
                app.Quit();
            }
            void DoMerge()
            {
                
                //declare variate bool to judge if copy table header
                bool b = false;
                foreach (string strFile in _sourceFiles)
                {
                    OpenBook(strFile);
                    if (b == false)
                    {
                        CopyHeader();
                        b = true;
                    }
                    CopyData();
                    CloseBook();
                }
                Save();
                Quit();
            }
            /// merge table
            /// source file
            /// object file
            /// the sign of the last column
            /// the number of rows of table header
            public static void DoMerge(string[] sourceFiles, string destFile, string columnEnd, int headerRowCount)
            {
                new MergeExcel(sourceFiles, destFile, columnEnd, headerRowCount).DoMerge();
            }
        }
    }
    

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. unione più file excel in un unico file
    Da superela nel forum Microsoft Excel
    Risposte: 1
    Ultimo Post: 28-10-2012, 07:48
  2. Copia di alcune celle da file excel chiusi in un unico file
    Da luis6326 nel forum Microsoft Excel
    Risposte: 12
    Ultimo Post: 06-01-2012, 14:21
  3. Importare dati da N file excel in un unico file excel
    Da user_lab nel forum Microsoft Excel
    Risposte: 0
    Ultimo Post: 06-12-2011, 13:27
  4. Risposte: 9
    Ultimo Post: 17-11-2011, 12:26
  5. Creare file di excel da un unico foglio di lavoro Excel
    Da serpico74 nel forum Microsoft Excel
    Risposte: 7
    Ultimo Post: 12-10-2006, 18:58