【问题标题】:import a specific range from xls file to datagridview in c#在c#中将特定范围从xls文件导入datagridview
【发布时间】:2012-08-20 02:44:16
【问题描述】:

我想将特定范围的 xls 文件导入 datagridview。问题是:范围每次都在变化,因此我需要用户能够选择它。有没有一种优雅的方法来做到这一点?

【问题讨论】:

  • 描述范围如何变化,你确定不能自动选择吗?
  • 您可以在 Excel 中参考application.selection,但这完全取决于您从哪里开始。
  • 用户如何触发此导入?
  • 用户选择打开一个文件,然后是他想要的数据表,最后是他需要的区域。用户可能选择的区域绝对没有模式,它可能是一行,也可能是整张桌子......

标签: c# excel datagridview xls


【解决方案1】:

查看此代码是否适合您。它提示用户打开一个 excel 文件,然后提示他们输入他们希望在 DataGridView 中看到的范围。在他们选择范围后,它将该范围转换为 DataTable 并将 DataTable 设置为源。

我不确定您到底想如何使用它或您想添加到它的任何其他功能,但这应该为您提供一个开始的构建块。

    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; }
    }

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2021-07-12
    • 2019-02-18
    相关资源
    最近更新 更多