[Excel, C++] CONTARE il CONTENUTO delle CELLE

katamax
Come si fa a contare quante volte il contenuto di una cella si ripete ?

Non devo per forza usare Excel, se si può fare creando un programmino con C++ o simili va bene lo stesso.

Qui è possibile fare qualcosa di simile: http://office.microsoft.com/it-it/excel ... 70480.aspx

La differenza è che io non conosco quanti e quali sono i contenuti.

Mi spiego meglio: sto facendo una ricerca bibliografica e devo contare QUANTE volte una keywords contenuta negli abstract degli articoli di una rivista dal 1999 al 2012 si ripete.
Con un po di fatica alla fine sono riuscito a scremare il file csv esportato dal database SCOPUS ottentendo un file excel in cui in ogni cella è presente una keyword (non necessariamente un'unica parola) : https://www.dropbox.com/s/r92u7phv9y090m2/keywords.xlsx
credo che siamo almeno sulle 10'000 stringhe di caratteri.

Devo contare quante volte ogni keyword è ripetuta. E' possibile?

Risposte
Summerwind78
Certamente è possibile


è un po' laborioso ma si può fare.
Come vuoi che ti venga restituito il risultato? Andrebbe bene un file di testo dove in ogni riga hai una keyword e il rispettivo numero di ripetizioni?

katamax
avrei bisogno di fare un grafico quindi mi servirebbe una tabella in excel.
Ma un file di testo va benissimo, dato che è possibile importarne i dati in excel, a patto che i separatori siano simboli diversi dalla virgola, dato che alcune keyword contengono anche la virgola. Punto e virgola sarebbe perfetto. :smt023

Edit: questo è il csv da cui sono partito, magari ti è utile https://www.dropbox.com/s/y46jqe7h7jxpgfk/scopus_6.csv

Summerwind78
Mi ci metto più che volentieri....

ho bisogno di un po' di tempo perchè il tempo libero è veramente scarso :D

cerco di fare il più un fretta possibile

Summerwind78
Perchè il codice che segue funzioni il file excel deve essere nella stessa cartella del file eseguibile

using System;
using System.Collections.Generic;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel; 


namespace ParoleExcel
{
    class Program
    {
        
        static void Main(string[] args)
        {
            Dictionary<string, int> dicElementi = new Dictionary<string, int>();

            string exePath = AppDomain.CurrentDomain.BaseDirectory;

                        
            Excel.Application oExcel = new Excel.Application();

            Excel.Workbook oBook = oExcel.Workbooks.Open(exePath + "\\keywords.xlsx");
            Excel.Worksheet oSheet = (Excel.Worksheet)oBook.Worksheets.get_Item(1);
            Excel.Range range ;


            range = oSheet.UsedRange;

            
            string sContenutoCella;
            int ContatoreRighe = 1;
            int ContatoreColonne = 1;
            Boolean bEsci = false;



            Console.Write("Inizio analisi del file...\n");
            Console.Write("Riga.... 1");
            while (!bEsci)
            {
                sContenutoCella = (string)(oSheet.Cells[ContatoreRighe, ContatoreColonne] as Excel.Range).Value;
                if (ContatoreColonne == 1 && sContenutoCella == null) 
                    bEsci = true;
                                
                else
                {
                    if (sContenutoCella == null)
                    {
                        ContatoreRighe++;
                        ContatoreColonne = 1;
                        Console.Write("Riga.... " + ContatoreRighe.ToString() + "\n");
                    }
                    else
                    {
                        
                        if (dicElementi.ContainsKey(sContenutoCella))
                        {
                            dicElementi[sContenutoCella] += 1;
                        }
                        else
                        {
                            dicElementi.Add(sContenutoCella, 1);
                        }
                        ContatoreColonne++;
                    }
                    
                }
            }
            Console.Write("Analisi Completata!");
            oBook.Close(true, null, null);
            oExcel.Quit();

            releaseObject(oSheet);
            releaseObject(oBook);
            releaseObject(oExcel);


            System.Text.StringBuilder mySB = new StringBuilder();

            foreach( KeyValuePair<string, int> kvp in dicElementi )
            {
                mySB.Append(kvp.Key);
                mySB.Append(";");
                mySB.AppendLine(kvp.Value.ToString());
            }

            System.IO.File.WriteAllText("risultato.txt",mySB.ToString());



        }

        
             
             



        public static void releaseObject(object obj)

        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                Console.Write("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 
        
        }
    }




katamax
grazie milleeeeeeeee :smt023

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.