导入一个特定的范围从xls文件到datagridview在c#

我想要将一个特定范围的xls文件导入到datagridview中。 问题是:范围每次都在变化,所以我需要用户能够select它。 有没有一个优雅的方式来做到这一点?

看看这段代码是否适合你。 它提示用户打开一个Excel文件,然后提示他们想要在DataGridView中看到的范围。 在select范围之后,它将该范围转换为DataTable并将DataTable设置为源。

我不确定你想要如何使用它或任何其他function,你想添加到它,但这应该给你一个基石开始。

  private Excel.Application App; private Excel.Range rng = null; private void button1_Click_1(object sender, EventArgs e) { OpenFileDialog OFD = new OpenFileDialog(); OFD.Filter = "Excel Worksheets|*.xls;*.xlsx;*.xlsm;*.csv"; if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK) { App = new Excel.Application(); App.Visible = true; App.Workbooks.Open(OFD.FileName); } else { return; } try { rng = (Excel.Range)App.InputBox("Please select a range", "Range Selection", Type: 8); } catch { } // user pressed cancel on input box if (rng != null) { DataTable dt = ConvertRangeToDataTable(); if (dt != null) { dataGridView1.DataSource = dt; } } _Dispose(); } private DataTable ConvertRangeToDataTable() { try { DataTable dt = new DataTable(); int ColCount = rng.Columns.Count; int RowCount = rng.Rows.Count; for (int i = 0; i < ColCount; i++) { DataColumn dc = new DataColumn(); dt.Columns.Add(dc); } for (int i = 1; i <= RowCount; i++) { DataRow dr = dt.NewRow(); for (int j = 1; j <= ColCount; j++) { dr[j - 1] = rng.Cells[i, j].Value2; } dt.Rows.Add(dr); } return dt; } catch { return null; } } private void _Dispose() { try { Marshal.ReleaseComObject(rng); } catch { } finally { rng = null; } try { App.Quit(); Marshal.ReleaseComObject(App); } catch { } finally { App = null; } }