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

C# 在c中导入从xls文件到datagridview的特定范围#,c#,excel,datagridview,xls,C#,Excel,Datagridview,Xls,我想将xls文件的特定范围导入datagridview。问题是:范围每次都会改变,因此我需要用户能够选择它。有没有一种优雅的方法可以做到这一点?看看这段代码是否适合您。它会提示用户打开excel文件,然后提示用户在DataGridView中查看的范围。选择范围后,它将该范围转换为数据表,并将数据表设置为源 我不确定你到底想如何使用它或你想添加到它的任何其他功能,但这应该给你一个构建块开始 private Excel.Application App; private Excel.R

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

看看这段代码是否适合您。它会提示用户打开excel文件,然后提示用户在DataGridView中查看的范围。选择范围后,它将该范围转换为数据表,并将数据表设置为源

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

    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; }
    }
private Excel.Application应用程序;
私有Excel.Range rng=null;
私有无效按钮1\u单击\u 1(对象发送者,事件参数e){
OpenFileDialog OFD=新建OpenFileDialog();
OFD.Filter=“Excel工作表|*.xls;*.xlsx;*.xlsm;*.csv”;
if(OFD.ShowDialog()==System.Windows.Forms.DialogResult.OK){
App=新的Excel.Application();
App.Visible=true;
App.Workbooks.Open(OFD.FileName);
}
else{return;}
试试{rng=(Excel.Range)App.InputBox(“请选择一个范围”,“范围选择”,键入:8);}
catch{}//用户在输入框上按了“取消”
如果(rng!=null){
DataTable dt=ConvertRangeToDataTable();
如果(dt!=null){dataGridView1.DataSource=dt;}
}
_处置();
}
专用数据表ConvertRangeToDataTable(){
试一试{
DataTable dt=新的DataTable();
int ColCount=rng.Columns.Count;
int RowCount=rng.Rows.Count;
for(int i=0;i对于(int i=1;我描述了范围是如何变化的,你确定不能自动进行选择吗?你可以参考Excel中的
应用程序。选择
,但这一切都取决于你从哪里开始。用户如何触发此导入?用户选择打开一个文件,然后打开他想要的数据表,最后打开他需要的区域。绝对在用户可能选择的区域中没有模式,它可以是一行,也可以是完整的表。。。