아래 코드를 Excel에서 DataGridview로 가져 오는 코드가 있습니다. 하지만 난 단지 하나의 열에 아래로 수직으로 정렬 된 헤더입니다 첫 번째 행 싶어요. 여기에 코드가 있습니다. 내가 dtExcel.Rows[0][0].ToString();
같은 것을 사용하여 시도했지만 작동하지 않습니다. 누군가가 왜 나에게 이것을 말해 줄 수 있습니까?DataGridview로 Excel에서 헤더를 가져 오는 방법?
private void button1_Click(object sender, EventArgs e)
{
string filePath = string.Empty;
string fileExt = string.Empty;
OpenFileDialog file = new OpenFileDialog(); //open dialog to choose file
if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK) //if there is a file choosen by the user
{
filePath = file.FileName; //get the path of the file
fileExt = Path.GetExtension(filePath); //get the file extension
if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0)
{
try
{
DataTable dtExcel = new DataTable();
dtExcel = ReadExcel(filePath, fileExt); //read excel file
dataGridView1.Visible = true;
dataGridView1.DataSource = dtExcel;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
else
{
MessageBox.Show("Please choose .xls or .xlsx file only.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error); //custom messageBox to show error
}
}
}
public DataTable ReadExcel(string fileName, string fileExt)
{
string conn = string.Empty;
DataTable dtexcel = new DataTable();
if (fileExt.CompareTo(".xls") == 0)
conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';"; //for below excel 2007
else
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=NO';"; //for above excel 2007
using (OleDbConnection con = new OleDbConnection(conn))
{
try
{
OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con); //here we read data from sheet1
oleAdpt.Fill(dtexcel); //fill excel data into dataTable
}
catch { }
}
return dtexcel;
}
ReadRxcel의 코드는 무엇입니까? – Kason
@Kason 죄송합니다. 통지하지 않았습니다. 나는 코드를 포함시켰다. 감사합니다. – MRu
dtexcel.Columns()를 통해 열거하고 Name 속성을 가져옵니다. foreach (dtexcel.Columns의 DataColumn col) – jdweng