Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2011, 22: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 22:14.
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
L'auto solare che produce più ene...
Apple Intelligence entra in una nuova er...
Il robot di Unitree è un vero spr...
Il nuovo Motorola Razr 70 Ultra è...
OnePlus anticipa l'arrivo di un tablet t...
Il MacBook Neo è un successo: App...
Lenovo anticipa l'arrivo di un nuovo sma...
Ecovacs presenta la gamma 2026: paviment...
Efficienza energetica fino a 2.000 volte...
Lenovo 360: il programma di canale dell'...
Appena 10.000 qubit per rompere la critt...
Analisi dei transistor durante il funzio...
Attacco informatico a Booking.com: espos...
A quattro mesi dal divieto dei social ne...
NVIDIA GeForce RTX 5060 e 5060 Ti: in ar...
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: 08:33.


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