Jump to content

Como faço para buscar o nome(cabeçalho) das células de uma planilha excel ?


Diego Farias
 Share

Recommended Posts

Diego Farias

Boa tarde... Pessoal estou criando uma aplicação que ira importar os dados de uma planilha excel para o banco de dados.

Consigo ler a planilha e preencher o gridView.. Só que antes de preencher o grid gostaria de validar se a planilha tem os nome definidos como layout padrão, só que não estou conseguindo pela o cabeçalho pego a primeira linha.

Alguém pode me ajudar ?

Segue código:

 // Método que renderiza a planilha no gridView
	public void PreencheGridView(string pCaminhoArquivo)
	{
		int countLinhas = 0;

		// Caminho do arquivo
		string arquivo = pCaminhoArquivo;

		// Microsoft.ACE.OLEDB.12.0 - Funciona apenas para ambientes de 64bits
		string strConexao = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=0\"", arquivo);

		using (OleDbConnection connection = new OleDbConnection(strConexao))
		{
			try
			{
				if (connection.State == ConnectionState.Closed)
				{
					connection.Open();
				}

				System.Data.DataTable dataTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

				//Cria o objeto dataset para receber o conteúdo do arquivo Excel //
				DataSet dataSet = new DataSet();

				// Desabilitando o botão cancelar
				btnCancela.Enabled = false;

				foreach (DataRow dataRow in dataTable.Rows)
				{
					// obtem o noma da planilha corrente
					string planilhaAtual = dataRow["TABLE_NAME"].ToString();

					if (comboBoxPlanilha.Text != "-- Selecione --")
					{
						nomePlanilha = comboBoxPlanilha.Text;
					}
					else
					{
						nomePlanilha = planilhaAtual;
					}

					if (dataTable.Rows.Count != comboBoxPlanilha.Items.Count)
					{
						comboBoxPlanilha.Items.Add(planilhaAtual);
					}

					// Obtem todos as linhas da planilha corrente(Atual)
					using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + nomePlanilha + "]", connection))
					{
						cmd.CommandType = CommandType.Text;

						// copia os dados da planilha para o datatable
						System.Data.DataTable outputTable = new System.Data.DataTable(planilhaAtual);

						// Adicionando o dataTable no dataSet
						dataSet.Tables.Add(outputTable);

						// Preenchendo o dataTable
						OleDbDataAdapter adpater = new OleDbDataAdapter(cmd);

						adpater.Fill(outputTable);

						if (countLinhas == 0)
						{
							countLinhas = outputTable.Rows.Count;
						}

						ValidaDados(outputTable);
					}						
				}

				MessageBox.Show("\tAguarde...\n\nEnquanto os dados serão carregados.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
				progressBar1.Visible = true;		  

				// Neste momento, o conteúdo de todas as planilhas presentes no arquivo Excel foi copiado para os DataTables consolidados no Dataset "output".
				dataGridView_IMPORT.DataSource = dataSet.Tables[0];	

				dataGridView_IMPORT.AutoGenerateColumns = true;

				// Método que preenche a barra de progresso
				CaluculaBarrasProgress(progressBar1, countLinhas);

				txtQuantidadeLinhas.Text = dataGridView_IMPORT.RowCount.ToString();

				MessageBox.Show("Dados carregados com sucesso", "Confirmação", MessageBoxButtons.OK, MessageBoxIcon.Information);

				progressBar1.Visible = false;

				progressBar1.Value = 0;
			}
			catch (OleDbException ex)
			{
				MessageBox.Show("Erro: " + ex.Message + "\n\nEntre em contato com administrador do sistema\n\nA operação será encerrada.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
				Cancelar();
			}
			finally
			{
				connection.Close();

				btnCancela.Enabled = true;

				//ValidaDados();
			}
		}
	}



	// Método que vai validar os dados e preencher a tabela de erro e validar o cabeçalho do exel
	private void ValidaDados(System.Data.DataTable pdataTable)
	{


		ArrayList arrList = new ArrayList();

		for (int i = 0; i < dataGridView_IMPORT.Rows[0].Cells.Count; i++)
		{
			if (dataGridView_IMPORT.Rows[0].Cells.Equals("Cód.Forn."))
			{
				foreach (DataGridViewCell cell in dataGridView_IMPORT.Rows[i].Cells)
				{
					arrList.Add(cell.Value.ToString());
				}
			}
		}


		dataGridView_ERRO.AutoGenerateColumns = true;

		dataGridView_ERRO.DataSource = null;

		// ArrayList arrList = new ArrayList();

		for (int i = 0; i < dataGridView_IMPORT.Rows.Count - 1; i++)
		{
			//ArrayList arrList = new ArrayList();

			foreach (DataGridViewCell cell in dataGridView_IMPORT.Rows[i].Cells)
			{
				arrList.Add(cell.Value.ToString());
			}

			dataGridView_ERRO.Rows.Add(arrList.ToArray());
			//dataGridView_ERRO.DataSource = arrList.ToArray();

			arrList.Clear();
		}

		dataGridView_ERRO.Update();
		dataGridView_ERRO.Refresh();
	}
Edited by apocsantos
geshi
Link to comment
Share on other sites

Podias usar as tags que existem para que se compreenda melhor o teu código.

Escreve code dentro de parenteses rectos depois escreve o teu codigo e depois /code em parenteses rectos. Esse é o basico.

O teu codigo aqui

Para perguntas idiotas, respostas estúpidas!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.