Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2011, 23:06   #1
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
[C#] import di dati da foglio excel in un DataSet con Visual Studio 2010

Dato che io sono diventato scemo a trovare un metodo efficace
e ben fatto, vi metto il codice di come ho fatto io (perfettamente funzionante)

Importo da Excel 3 colonne (A,B,C) e prendo i valori per singola cella che copio nella variabile mioDatabase di tipo DataSet. Più precisamente i dati li vado a salvare in una tabella di mioDatase chiamata Localita Disagiate.
Infatti nel mio foglio Excel ci sono i cap, citta e provincia definiti come disagiate (a livello camionistico).

ESEMPIO localitaDisagiate.xls

COLONNA A - COLONNA B - COLONNA B
AL ALESSANDRINO 15041
MI LEGNANO 02100

ps: in Progetto -> Aggiungi Riferimenti bisogna aggiungere il riferimento a Microsoft.Excel (io ho la versione 12 avendo installato sul mio pc office 2010)
pps: Come vedrete il costruttore ha un paramentro mioDatabase che proviene da un form precedente dove ho aperto un file chiamato MioDatabase.xml ove all'interno carico e salvo tutti i miei dati.

Codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using Excel = Microsoft.Office.Interop.Excel;

namespace testbed.Gestione
{
public partial class ImportExcelLocalitaDisagiate : Form
    {
        DataSetDatabasePrese mioDatabase;
        Excel.Worksheet worksheet;
        Microsoft.Office.Interop.Excel.Workbook workbook ;
        Double LastRow;
        
        DataSetDatabasePrese.LocalitaDisagiateRow miaRiga;
        string nomeDatabase = "MioDatabase.xml";
        DataSetDatabasePrese.LocalitaDisagiateDataTable dt = new DataSetDatabasePrese.LocalitaDisagiateDataTable();

public ImportExcelLocalitaDisagiate(DataSetDatabasePrese db)
        {
            // Bibliografia Excel http://it.w3support.net/index.php?db=so&id=509749
            InitializeComponent();
            mioDatabase = db;
            miaRiga = mioDatabase.LocalitaDisagiate.NewLocalitaDisagiateRow();
            worksheet = new Excel.Worksheet();
            dataGridView1.DataSource = mioDatabase.LocalitaDisagiate;
            //Necesasrio perchè se si ha una versione di Office <= 2007 con una lingua diversa da quella inglese il codice genera sempre un errore
            //perchè tenta di passare il contenuto delal cella con impostazione italiana, ma si scontra con un bug di office <= 2007 che non gestisce correttamente il multilingua
            //l'unica lingua funzionante è l'inglse,e con la riga sottostante si fa credere al compilatore che la lingua di office sia inglese
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");     
        }



private void buttonImportaValoriDaExcel(object sender, EventArgs e)
        {
            #region init e variabili
            //Apro una finestra di dialogo
            OpenFileDialog apri = new OpenFileDialog();
            //Dichiaro la variabile app di tipo nuova Excel Application
            Excel.Application app = new Excel.Application();
            System.Reflection.Missing v = System.Reflection.Missing.Value;  
           // OleDbDataAdapter adapter = new OleDbDataAdapter(); 
            string filename;
            #endregion
            
            #region apro il file Excel
            //Apro il file eXcel
            if (apri.ShowDialog() != DialogResult.OK)
                return;
            //Dichiaro un nuovo wb di tipo Workbook
            try
            {
                filename = apri.FileName;
                workbook = app.Workbooks.Open(filename, v, v, v, v, v, v, v, v, v, v, v, v, v, v);
                
            }
            catch
            {
                MessageBox.Show("Non è stato possibile aprire il file Excel. Probabilmente il file Excel è corrotto");
                buttonSfoglia.Focus();
                return;
            }
            #endregion
            
            worksheet = workbook.Worksheets[1] as Excel.Worksheet;
            //Se esiste gia elimino tutto il contenuto località disagiate
            if (mioDatabase.LocalitaDisagiate.Rows.Count > 0)
                mioDatabase.LocalitaDisagiate.Rows.Clear();

            #region controllo Valori e inserimento dati nel database dal file Excel
            string Provincia;
            string localita;
            string cap;
            dynamic dynProvince;
            dynamic dynLocalita;
            dynamic dynCap;

            for (int riga = 1; riga < 65536; riga++ )
            {
                Provincia = null;
                localita = null;
                cap = null;
                //proviamo a vedere se riesco a procurarmi un valore!
                //Inizializza una nuova riga
                //Se si lavora con versione di windows ed Excel 2003 diversa da quelle inglesi bisogna scaricare da qua http://www.microsoft.com/downloads/it-it/details.aspx?FamilyID=E6386D0D-954B-44A2-B8A1-E0F2E717D387
                //il Multilenguage User Interface Utils pack for excel, altrimenti darà sempre eccezione HRESULT:0x800A03EC
                try
                {
                    dynCap = worksheet.get_Range("C" + riga as string, "C" + riga as string).Value2;
                    dynLocalita = worksheet.get_Range("B" + riga as string, "B" + riga as string).Value2;
                    dynProvince = worksheet.get_Range("A" + riga as string, "A" + riga as string).Value2;
                    //salta righe dove anche uno solo dei valore è nullo!
                    if ((dynCap == null) || (dynLocalita == null) || (dynProvince == null))
                        break;
                    //Ok now try to get info:)
                    if (dynCap is double)
                        cap = ((double)dynCap).ToString();
                    if (dynCap is float)
                        cap = ((float)dynCap).ToString();
                    if (dynCap is string)
                        cap = dynCap as string;

                    if (dynLocalita is string)
                        localita = ((string)dynLocalita).Trim();
                    if (dynProvince is string)
                        Provincia = dynProvince as string;
                }
                catch (Exception ex)
                { 
                    MessageBox.Show("Errore: " + ex.Message);
                    return;
                }
                //Controlla che tutto abbia ricevuto un volare!
                if ((!string.IsNullOrEmpty(cap)) && (!string.IsNullOrEmpty(localita)) && (!string.IsNullOrEmpty(Provincia)))
                    mioDatabase.LocalitaDisagiate.AddLocalitaDisagiateRow(cap, Provincia, localita);

            }
            
           #endregion

        
            #endregion
           
            mioDatabase.WriteXml(nomeDatabase);
            MessageBox.Show("Località disagiate correttamente caricate");
            this.Close();
        }
   }

}
PPS: Spero di esser stato d'aiuto a tutti coloro che cercassero un modo per caricare da Excel i dati.

PPPPS: Questa riga di codice :
Codice:
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
serve perchè se fate girare il software su pc con installato versioni di Office <= office 2003 dove non è installato il pack aggiuntivo: Multilingual User Interface Pack, il codice in fase di compilazione vi darà sempre questo errore : c# HRESULT: 0x800A03EC a questa riga:
Codice:
dynCap = worksheet.get_Range("C" + riga as string, "C" + riga as string).Value2;
questo perchè office <= 2003 ha un bug dove il codice LCID non si riesce a passare come parametro e quindi, se si sta facendo girare la nsotra applicazione su un pc dove office e windows sono di una lingua diversa da quella inglese si genera l'eccezione scritta sopra, proprio perchè non si riesce a far passare quel parametro..

spero di aver spiegato in modo chiaro...

Ultima modifica di 3nigma666 : 17-05-2011 alle 23:14.
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Scopa elettrica lavapavimenti top di gam...
Lefant M330Pro a 139,99€ non ha rivali e...
TOP, c'è XIAOMI Redmi Note 15 Pro...
Il MacBook Pro è sempre più...
Il prezzo della Switch 2 potrebbe divent...
TikTok chiarisce il funzionamento della ...
Samsung Galaxy A07 5G: il nuovo entry le...
Realme 16 in arrivo: un mix tra iPhone A...
Domenica di follia su Amazon: iPhone 17 ...
Questo portatile HP OMEN con Core Ultra ...
Robot aspirapolvere al prezzo giusto: le...
Il nuovo M5 Max potrebbe avere una GPU p...
Pulizie automatiche al top (e a prezzo B...
Casa più calda, spese più leggere: Tado ...
Mini PC mostruoso in offerta nascosta su...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v