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