none
como usar um progresbar neste caso ? RRS feed

  • Pergunta

  •  olá, eu preciso colocar uma barra enquanto eu importo para o access uma tabela do excel mas nao sei como fazer isso. 

    alguem poderia me ajuda o codigo que uso eh este :

     nomePlanilha = textBox3.Text;
                diretorio = textBox1.Text;
                try
                {  if (textBox1.Text != "" && textBox3.Text != "")
                    {
                    string path = diretorio;
                    Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
                    Microsoft.Office.Interop.Excel._Workbook workbook = excelapp.Workbooks.Open(path);
                    Microsoft.Office.Interop.Excel._Worksheet worksheet = workbook.Worksheets[nomePlanilha];
                    worksheet = (Worksheet)workbook.ActiveSheet;
    
                    worksheet.Cells[1, 1] = "Pers.No.";
                    worksheet.Cells[1, 2] = "Nome";
                    worksheet.Cells[1, 3] = "Data";
                    worksheet.Cells[1, 4] = "From";
                    worksheet.Cells[1, 5] = "End_time";
                    worksheet.Cells[1, 6] = "Hours";
                    worksheet.Cells[1, 7] = "WBS_element";
                    worksheet.Cells[1, 8] = "AttAbsTxt";
                    worksheet.Cells[1, 9] = "ShortText";
                    worksheet.Cells[1, 10] = "Ext_Task_Name";
                    worksheet.Cells[1, 11] = "Proj_Task";
                    worksheet.Cells[1, 12] = "Categoria";
                    worksheet.Cells[1, 15] = "Sistema";
                    worksheet.Cells[1, 16] = "Tipo";
                    worksheet.Cells[1, 17] = "Líder_MIG";
                    worksheet.Cells[1, 18] = "Presage_code";
    
                    workbook.Save();
                    excelapp.Quit(); // Fecha a Aplicação
                    excelapp = null; // Fecha a Aplicação
                    GC.Collect(); // Fecha a Aplicação
                    GC.WaitForPendingFinalizers(); // Fecha a Aplicação
    
                  
                        OleDbConnection conn = new OleDbConnection(("Provider=Microsoft.ACE.OLEDB.12.0; " + ("data source=" + diretorio + "; " + "Extended Properties=Excel 12.0;")));
                        OleDbDataAdapter ada = new OleDbDataAdapter("select * from [" + nomePlanilha + "$]", conn);
                        DataSet ds = new DataSet();
                        ada.Fill(ds);
                        conn.Close();
                        OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\BbConsolida.accdb");
                        myConnection.Open();
                        string queryString = "SELECT * into RelatorioSAP from [" + nomePlanilha + "$]";
                        OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, myConnection);
                        System.Data.DataTable dtAccess = new System.Data.DataTable();
                        System.Data.DataTable dtCSV = new System.Data.DataTable();
                        dtCSV = ds.Tables[0];
                        foreach (DataRow dtRow in dtCSV.Rows)
                        {
                           using (OleDbCommand cmd = myConnection.CreateCommand())
                            {
                                cmd.CommandText =
                                    "INSERT INTO RelatorioSAP" +
                                    "(Nome,Hours, ShortText, Categoria, Data,WBS_element) " +
                                    "VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)";
                                cmd.Parameters.AddRange(new OleDbParameter[]
               {           
                   new OleDbParameter("@Nome"       , dtRow[1]),
                   new OleDbParameter("@Hours"      , dtRow[5]),
                   new OleDbParameter("@ShortText"  , dtRow[8]),
                   new OleDbParameter("@Categoria"  , dtRow[11]),
                   new OleDbParameter("@Data"       , dtRow[2]),
                   new OleDbParameter("@WBS_element", dtRow[6])    
               });
                                cmd.ExecuteNonQuery();
                            }
                        }
                        myConnection.Close();
                        MessageBox.Show("Tabela Importada","Aviso");
                    }
                    else
                    {
                        MessageBox.Show("Informe o diretorio e o nome da da planilha.", "Aviso", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message); ;
                }

    quinta-feira, 22 de agosto de 2013 18:21

Respostas

  • Olá! Não testei aqui, mas imagino que seja algo do tipo a seguir...

    ProgressBar1.Maximum = dtCSV.Rows.Count;

    ProgressBar1.Value = 0;

    foreach (DataRow dtRow in dtCSV.Rows)
    {
    using (OleDbCommand cmd = myConnection.CreateCommand())
    {
    cmd.CommandText =
    "INSERT INTO RelatorioSAP" +
    "(Nome,Hours, ShortText, Categoria, Data,WBS_element) " +
    "VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)";
    cmd.Parameters.AddRange(new OleDbParameter[]
    {           
    new OleDbParameter("@Nome"       , dtRow[1]),
    new OleDbParameter("@Hours"      , dtRow[5]),
    new OleDbParameter("@ShortText"  , dtRow[8]),
    new OleDbParameter("@Categoria"  , dtRow[11]),
    new OleDbParameter("@Data"       , dtRow[2]),
    new OleDbParameter("@WBS_element", dtRow[6])    
    });
    cmd.ExecuteNonQuery();

    ProgressBar1.Value++;

    ProgressBar1.Refresh(); // Forçar o redesenhamento do progressbar...

    }
    }


    Matheus

    quinta-feira, 22 de agosto de 2013 19:31

Todas as Respostas

  • Olá! Não testei aqui, mas imagino que seja algo do tipo a seguir...

    ProgressBar1.Maximum = dtCSV.Rows.Count;

    ProgressBar1.Value = 0;

    foreach (DataRow dtRow in dtCSV.Rows)
    {
    using (OleDbCommand cmd = myConnection.CreateCommand())
    {
    cmd.CommandText =
    "INSERT INTO RelatorioSAP" +
    "(Nome,Hours, ShortText, Categoria, Data,WBS_element) " +
    "VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)";
    cmd.Parameters.AddRange(new OleDbParameter[]
    {           
    new OleDbParameter("@Nome"       , dtRow[1]),
    new OleDbParameter("@Hours"      , dtRow[5]),
    new OleDbParameter("@ShortText"  , dtRow[8]),
    new OleDbParameter("@Categoria"  , dtRow[11]),
    new OleDbParameter("@Data"       , dtRow[2]),
    new OleDbParameter("@WBS_element", dtRow[6])    
    });
    cmd.ExecuteNonQuery();

    ProgressBar1.Value++;

    ProgressBar1.Refresh(); // Forçar o redesenhamento do progressbar...

    }
    }


    Matheus

    quinta-feira, 22 de agosto de 2013 19:31
  • foi isso mesmo que eu fiz 

    vlw

    segunda-feira, 26 de agosto de 2013 19:26