请教:在c#中如何打开excel文件,把数据导入DataGridView,但是要实现自由选择所打开的excel文件,而不是在DataSource中固定了;怎样将DataGridView中的数据导出为excel?
解决方案 »
- 正则表达式 在线等 求助
- 删除textbox下拉列选取的内容
- byte转换ascii码的问题
- 自定义控件年月日的问题
- 有人在吗 散100分,顺便问个问题~~
- 打印
- 如何刷新textbox.text?
- 关于menustrip和toolstrip的关系
- 怎样实现把string转换成datatime类型?
- 用c#做了一个winform程序,涉及到了数据库.这个程序要放到别人电脑上用,别人电脑没安数据库,我怎么才能让别人的电脑用这个程序时可以访问到我 的电脑上的数据
- 面试碰到的题目:手写一个WinForm程序,包含布局整齐的一个文本框和一个按钮,单击按钮弹出消息框显示文本框的内容,用委托实现。
- 怎么找不到microsoft.web.administration.dll这文件,VS2008里也没有Microsoft.Web.Administration这空间
http://www.cnblogs.com/gzlwp775/archive/2006/11/08/554621.html。
我用这个方法开发过一个导出工具,实现起来并不是特别麻烦。
private void ToExcel()
{
Excel.ApplicationClass MyExcel = new Excel.ApplicationClass();
MyExcel.Visible = true;
if (MyExcel == null)
{
MessageBox.Show("EXCEL无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} Workbook wbook = MyExcel.Application.Workbooks.Add(Type.Missing);
Worksheet worksheet = (Worksheet)wbook.Worksheets[1];
//worksheet.Name = "aa";
int rowcount = 0; //行号
int columncount = 0; //列号
//MyExcel.Application.Workbooks.Add(true); //加入表
columncount = this.dataGridView1.ColumnCount; //等于DATA表里行的总数
rowcount = this.dataGridView1.RowCount; //等于DATA表里列的总数
rowcount--; //因为打开dataGridView1时是默认新增的,所以要-1条记录数
//MessageBox.Show(rowcount.ToString());
//Excel文件的格式是从1开始,不是0开始
for (int m = 1; m < columncount; m++) //去除dataGridView1的编号列,即m=1,如m=0出错
{
worksheet.Cells[1, m] = this.dataGridView1.Columns[m].HeaderText;//得到列标题文本
}
for (int i = 0; i < rowcount; i++) //二维表填充从每一行开始
{
for (int j = 1; j < columncount; j++) //填充每一行第j列单元格
{
worksheet.Cells[i + 2, j] = this.dataGridView1[j, i].Value.ToString(); //i+2定位到第一行正文
//在填充单元格的时候如果关闭了EXCEL,程序会发生异常,下个版本有待改进。<--------------------
}
}
MessageBox.Show("数据导出完毕,请保存!");
自己写的函数,你可以试试导出
关键在于读取Excel的数据,给你个代码:
//opnFileName,EXCEL的路径(绝对)
string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
OleDbConnection conn = new OleDbConnection(ConnStr);
string strExcel = "";
strExcel = "select * from [Sheet1$]";
conn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, ConnStr);
//把读取的数据填入datetable (即dt)中。
myCommand.Fill(dt);
conn.Close();
conn.Dispose();
输出到Excel要调用Excel.dll文件,
Excel.dll文件的获取方法可以到网上搜索一下,
为了方便,我附件发了上来,
下面是核心代码:
Excel.Application myExcel = new Excel.Application();
myExcel.Application.Workbooks.Add(true);
myExcel.Visible = true;
string[] header ={ "1", "2", "3", "4" };
for (int i = 0; i < header.Length; i++)
{
myExcel.Cells[1, i + 1] = header[i];
}
int DGV_Row = this.dataGridView2.Rows.Count - 1;
for (int i = 0; i < DGV_Row; i++)
{
for (int j = 0; j < header.Length; j++)
{
myExcel.Cells[i + 2, j + 1] = "'" + this.dataGridView2[j, i].Value.ToString();
}
}