如何将数据库中的数据导入Excel表格?
我想从数据库生成一个Excel表(SQL 2008)。我写下面提到的代码,但它不工作。请帮助我改进我的代码。低于我的示例代码如何将数据库中的数据导入Excel表格?
protected void generate_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable(); //My Function which generates DataTable
DataSet ds = new DataSet();
using (ExcelPackage p = new ExcelPackage())
{
//Here setting some document properties
p.Workbook.Properties.Author = "Zeeshan Umar";
p.Workbook.Properties.Title = "Office Open XML Sample";
//Create a sheet
p.Workbook.Worksheets.Add("Sample WorkSheet");
ExcelWorksheet ws = p.Workbook.Worksheets[1];
ws.Name = "Sample Worksheet"; //Setting Sheet's name
ws.Cells.Style.Font.Size = 11; //Default font size for whole sheet
ws.Cells.Style.Font.Name = "Calibri"; //Default Font name for whole sheet
//Merging cells and create a center heading for out table
ws.Cells[1, 1].Value = "msd";
ws.Cells[1, 1, 1, ws.Dimension.End.Column].Merge = true;
// ws.Cells[1, 1, 1, dt.Columns.Count].Merge = true;
ws.Cells[1, 1, 1, ws.Dimension.End.Column].Style.Font.Bold = true;
ws.Cells[1, 1, 1, ws.Dimension.End.Column].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
int colIndex = 1;
int rowIndex = 2;
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT Fname,Mname FROM EmpMaster where EmpCode='" + ddcode.SelectedItem.Text + "'", conn);
// dr = conn.query(str);
SqlDataAdapter adr = new SqlDataAdapter();
adr.SelectCommand = cmd;
adr.Fill(dt);
//Add the table to the data set
ds.Tables.Add(dt);
//cell.Value = "Heading " + ds.ColumnName;
var rows = ds.Tables[0].Rows;
foreach (DataRow row in rows)
{
string name = Convert.ToString(row["Fname"]);
string code = Convert.ToString(row["Mname"]);
string lname = Convert.ToString(row["Lname"]);
//ws.Cells[colIndex +1 , rowIndex +0].Value = name;
//ws.Cells[colIndex +1, rowIndex +1].Value = code;
//ws.Cells[colIndex +1, rowIndex +2].Value = lname;
ws.Cells[rowIndex , colIndex ].Value = name;
ws.Cells[rowIndex , colIndex +1 ].Value = code;
ws.Cells[rowIndex , colIndex +2].Value = lname;
// Move to the next row in the sheet.
rowIndex++;
colIndex++;
}
//Generate A File with Random name
Byte[] bin = p.GetAsByteArray();
string file = "F:\\ excelsample.xlsx";
File.WriteAllBytes(file, bin);
System.Diagnostics.Process.Start("F:\\ excelsample.xlsx");
}
}
这生成excel工作表,但它只显示一行(中间名)。我有两个值名和中间名。我怎么能实现它?
foreach (DataRow row in rows)
{
string name = Convert.ToString(row["Fname"]);
string code = Convert.ToString(row["Middle Name"]);
// Setting Value in cell
ws.Cells[colIndex, rowIndex].Value = name;
ws.Cells[colIndex + 1, rowIndex].Value = code;
// Move to the next row in the sheet.
rowIndex++;
}
(row [..]);你的意思是? – 2014-12-04 09:42:39
@SaraJohn例如,如果你想从第一列中获得值,你可以使用'row [0]'。 – mainvoid 2014-12-04 09:49:32
ws.Cells [1,1,dt.Columns.Count] .Merge = true;字段显示列超出范围的错误消息。为什么? – 2014-12-04 09:52:51
让表单中的VB宏访问数据库并获取信息更聪明。它可能在Excel 2000-2003中,但不确定最新版本。 – i486 2014-12-04 10:52:55
@varchar,compnay名称未合并显示在第一列第一行 – 2014-12-04 11:22:50
注释不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/66198/discussion-on-question-by-sara-john-how-to-bring-data-from-database-to- Excel的她)。 – Taryn 2014-12-04 11:29:06