当前位置:编程学习 > C#/ASP.NET >>

C#winform中如何把表导出到EXCEL

C#winform中如何把表导出到EXCEL

使用的是datagridview控件,把其中的表导入到一个新的EXCEL文件中。

是不是把datagridview中表遍历一遍,一个个写到EXCEL文件中?

具体怎么写高手指点下,我用的ACCESS数据库。最好给个例子看看~

追问:有没有winform的?窗体的~

暂时不要web的,暂时用不到= =!

答案:我们一般用的方法是将表遍历一遍,然后写入到excel中,主要代码如下:

/// <summary>
/// 指定文件名称、表名、DataGridView导出DataGridView中的数据到Excel中
/// </summary>
/// <param name="location">输出文件的位置</param>
/// <param name="tableName">表名</param>
/// <param name="dt">DataGridView名称</param>
public void GridViewToExcel(string location, string tableName, DataGridView dt)
{
Stream myStream;
myStream = File.Open(location,FileMode.Create);
//StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312"));
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
string str = "";
int m=0;
try
{
//写标题
for (int i = 0; i < dt.ColumnCount; i++)
{
if (dt.Columns[i].Visible == false)
{
continue;
}
else
{
str += dt.Columns[i].HeaderText + "\t";
}
}

//string aa = str.Substring(0, str.Length - 1);
sw.WriteLine(str.Substring(0,str.Length-1));

//写内容
for (int j = 0; j < dt.Rows.Count; j++)
{
if (dt.Rows[j].Visible == true)
{
string tempStr = "";
for (int k = 0; k < dt.Columns.Count; k++)
{
if (dt.Columns[k].Visible == false)
{
continue;
}
else
{
tempStr += dt.Rows[j].Cells[k].Value.ToString() + "\t";
}
}

sw.WriteLine(tempStr.Substring(0,tempStr.Length-1));
}
}
sw.Close();
myStream.Close();
}

catch (Exception e)
{
MessageBox.Show(e.ToString());
}

finally
{
sw.Close();
myStream.Close();
}
}

我这里有个很简单的代码

你一看就会了,其实就是一个写文件的代码哈

首先你拖放一个savefiledialog哈!取名叫savaexcel.

savaexcel.Filter = "Excel文件(*.xls)|*.xls|Word文件(*.doc)|*.doc";
if (savaexcel.ShowDialog() == DialogResult.OK)
{
string filename = savaexcel.FileName;
string str = string.Empty;
for (int i = 0; i <datagridview1.Columns.Count ; i++)
{
str += datagridview1.columns[i].Headtext+ "\t";//写标题
if (i == datagridview1.Columns.Count - 1)
{
str += "\r";
}

}
for (int i = 0; i < datagridview1.rows.Count; i++)
{
for (int j = 0; j <=datagridview1.Columns.Count ; j++)

{
str += "'" +datagridview1.rows[i].cells[j].value.tostring()+ "\t";

if (j ==datagridview1.Columns.Count - 1)
{
str += "\r";
}
}
}
StreamWriter sw = new StreamWriter(filename, true, Encoding.GetEncoding("gb2312"));
sw.Write(str);
sw.Close();

}

记得引入system.io空间

这是我改过来的,有问题可以联系我哈!

不知道有没有bug,你试一下哈!

我原来用的listview。

不知道对没有。

应该没有错哈!

/// <summary>
/// 定义导出Excel的函数
/// </summary>
/// <param name="FileType">到处的类型</param>
/// <param name="FileName">路径名</param>
private void Export(string FileType, string FileName)
{
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType = FileType;
this.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
datagridview1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
}
/// <summary>
/// 此方法必重写,否则会出错
/// </summary>
/// <param name="control"></param>
public override void VerifyRenderingInServerForm(Control control)
{
}

private string _ExcelFile;
private System.Data.OleDb.OleDbConnection _connection;
private System.Data.OleDb.OleDbDataAdapter _adapter;
private System.Data.OleDb.OleDbCommand _command;

public int InsertRecord(string Fields, string Values)
{
int ri = 1;
try
{
this._connection.Close();
this._connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + _ExcelFile + ";Extended Properties =Excel 8.0;";
this._connection.Open();
this._command.Connection = this._connection;
this._command.CommandText = "insert into [Sheet1$] (" + Fields + ") values (" + Values + ")";
//this._command.CommandType = CommandType.Text;

this._command.ExecuteNonQuery();
this._connection.Close();
}
catch (Exception E)
{

ri = 0;
}

return ri;


}

上一个:C#中,中缀表达式如何转化为后缀表达式?
下一个:C# winform上的flash如何实现透明效果啊?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,