c#导出EXCEL表格

TLY1984 2011-11-01 02:42:52
再做一个项目,需要从数据库(SQL SERVER 2005)里读出数据,然后生成EXCEL报表。EXCEL报表的第一行列名很复杂,有合并单元格的等等要求,请问下有没有什么好点的有详细注释的教程链接给下,在网上搜了很久很多都是没有注释的,看不懂。
或者能给我写个简单的列子(要注释)也可以,谢谢了。
...全文
623 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
行侠者 2013-07-31
  • 打赏
  • 举报
回复
我之前做过C#导出Excel,还可以导出图形到Excel内 http://download.csdn.net/detail/jx_521/5819725 可以指定导出哪些列、可以设置Excel列宽、标题名、列名 我是用aspose.cells.dll做的,希望可以帮助你。
Sb梁先生 2013-07-31
  • 打赏
  • 举报
回复
导出excel很是麻烦,没有必要自己写。直接用NPOI就可以了哈。功能很强大的
zhao_zps 2011-11-01
  • 打赏
  • 举报
回复

#region//把datagridview中的数据全部导出到EXCEL
/// <summary>
/// 把datagridview中的数据全部导出到EXCEL
/// </summary>
/// <param name="dg1"></param>
public static void CopyToExcel(DataGridView dg1)
{
dg1.SelectAll();
Application.DoEvents();
Clipboard.SetText(dg1.GetClipboardContent().GetData(DataFormats.Text).ToString());
object oMissing = System.Reflection.Missing.Value;
try
{
Excel._Worksheet Sht;
Excel._Workbook Bo;
Excel.Application excel = new Excel.Application();
Bo = excel.Application.Workbooks.Add(true);
Sht = (Excel.Worksheet)Bo.Sheets[1];
Sht.Paste(oMissing, oMissing);
excel.Visible = true;
excel = null;
}
catch (Exception ex)
{
ex.ToString();
}
finally
{
}
}
#endregion
lihuinihao6315 2011-11-01
  • 打赏
  • 举报
回复

using Microsoft.Office.Tools.Excel;private bool toExcel(DataSet ds, string path, string strTime)
{
try
{
Excel.Application excel = new Excel.Application();
// Adds a new workbook to the excel application.
Excel.Workbook book = excel.Workbooks.Add(Type.Missing);
Excel.Worksheet sheet;
if(ds.Tables[0].Rows.Count <= 0 && ds.Tables[1].Rows.Count <=0 && ds.Tables[2].Rows.Count<=0)
{
return false;
}
// Excel.Worksheet xlSheet1, xlSheet2, xlSheet3;
logger.Info("Start Function ToExcel.GetGroupDB: Start Time:" + DateTime.Now.ToString());
#region 1.群組-團體
sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
sheet.Name = "群組-團體";
int iRow = ds.Tables[0].Rows.Count+1;
int iCol = ds.Tables[0].Columns.Count;
string[,] strAll = new string[iRow, iCol];
for (int col = 0; col < ds.Tables[0].Columns.Count; col++)
{
strAll[0, col ] = ds.Tables[0].Columns[col].ColumnName;
}
for (int row = 0; row < ds.Tables[0].Rows.Count; row++)
{
for (int col = 0; col < ds.Tables[0].Columns.Count; col++)
{
strAll[row + 1, col] = ds.Tables[0].Rows[row][col].ToString();
//sheet.Cells[row + 2, col + 1] = ds.Tables[0].Rows[row][col].ToString();
}
}
string b = "B" + iRow.ToString();
Excel.Range rng = sheet.get_Range("A1", b);
rng.Value2 = strAll;
#endregion
logger.Info("Start Function ToExcel.GetPayPeoPleDB: Start Time:" + DateTime.Now.ToString());
#region 2.繳款人
sheet = (Excel.Worksheet)book.Worksheets.get_Item(2);
sheet.Name = "繳款人";
string strCarSit = "";
DataSet dsGetOutCarSit = GetOutSellCarSit();
iRow = ds.Tables[1].Rows.Count+1 + dsGetOutCarSit.Tables[0].Rows.Count;
strAll = new string[iRow, 6];
strAll[0, 0] = "群組團體代號";//第一列列名
strAll[0, 1] = "繳款人代號"; //第二列列名
strAll[0, 2] = "繳款人名稱"; //第三列列名
strAll[0, 3] = "郵遞區號"; //第四列列名
strAll[0, 4] = "坪數"; //第五列列名
strAll[0, 5] = "車位"; //第六列列名

int iCount = ds.Tables[1].Rows.Count;
for (int row = 0; row < iCount; row++)
{
//strCarSit = GetDsWithCarSit(ds.Tables[1].Rows[row][1].ToString());
strAll[row + 1, 0] = ds.Tables[1].Rows[row][0].ToString();
strAll[row + 1, 1] = ds.Tables[1].Rows[row][1].ToString();
strAll[row + 1, 2] = ds.Tables[1].Rows[row][2].ToString();
strAll[row + 1, 3] = "'" + strTime;
strAll[row + 1, 4] = ds.Tables[1].Rows[row][3].ToString();
strAll[row + 1, 5] = ds.Tables[1].Rows[row][4].ToString();
}

for (int row = iCount; row < iCount + dsGetOutCarSit.Tables[0].Rows.Count; row++)
{
strAll[row , 0] = dsGetOutCarSit.Tables[0].Rows[row - iCount][0].ToString();
strAll[row , 1] = dsGetOutCarSit.Tables[0].Rows[row - iCount][1].ToString();
strAll[row, 2] = dsGetOutCarSit.Tables[0].Rows[row - iCount][2].ToString();
strAll[row, 3] = "'" + strTime;
strAll[row , 4] = "";
strAll[row , 5] = dsGetOutCarSit.Tables[0].Rows[row - iCount][3].ToString();
}
dsGetOutCarSit.Clear();
b = "F" + iRow.ToString();
rng = sheet.get_Range("A1", b);
rng.Value2 = strAll;
#endregion
logger.Info("Start Function ToExcel.GetPayPeoPleDB: Start Time:" + DateTime.Now.ToString());
#region 3.繳費資料
sheet = (Excel.Worksheet)book.Worksheets.get_Item(3);
sheet.Name = "繳費資料";
DataSet dsSupply = GetApplySheet();
iRow = ds.Tables[2].Rows.Count+1 + dsSupply.Tables[0].Rows.Count;
strAll = new string[iRow, 7];
strAll[0, 0] = "群組團體代號"; //第一列列名
strAll[0, 1] = "繳款人代號"; //第二列列名
strAll[0, 2] = ddl_Month.SelectedValue.ToString() + "月社區管理費"; //第三列列名
strAll[0, 3] = ddl_Month.SelectedValue.ToString() + "月汽車停車位管理費"; //第四列列名
strAll[0, 4] = ddl_Month.SelectedValue.ToString() + "月機車停車位管理費"; //第五列列名
strAll[0, 5] = ddl_Month.SelectedValue.ToString() + "月其他"; //第六列列名
strAll[0, 6] = "總金額"; //第七列列名
for (int row = 0; row < ds.Tables[2].Rows.Count; row++)
{
strAll[row + 1, 0] = ds.Tables[2].Rows[row][0].ToString();
strAll[row + 1, 1] = ds.Tables[2].Rows[row][1].ToString();
strAll[row + 1, 2] = ds.Tables[2].Rows[row][2].ToString();
strAll[row + 1, 3] = ds.Tables[2].Rows[row][3].ToString();
strAll[row + 1, 4] = ds.Tables[2].Rows[row][4].ToString();
strAll[row + 1, 5] = ds.Tables[2].Rows[row][5].ToString();
strAll[row + 1, 6] = ds.Tables[2].Rows[row][6].ToString();
}
iCount = ds.Tables[2].Rows.Count;
for (int row = 0; row < dsSupply.Tables[0].Rows.Count; row++)
{
for (int col = 0; col < dsSupply.Tables[0].Columns.Count; col++)
{
strAll[row + iCount , col] = dsSupply.Tables[0].Rows[row][col].ToString();
}
}
dsSupply.Clear();
iRow++;
b = "G" + iRow.ToString();
rng = sheet.get_Range("A1", b);
rng.Value2 = strAll;
#endregion
logger.Info("Start Function ToExcel.GetPayPeoPleDB: End Time:" + DateTime.Now.ToString());
string strServerPath = System.Web.Configuration.WebConfigurationManager.AppSettings["uploadpath"] + "JWNQ010\\";
if (!System.IO.Directory.Exists(strServerPath))
{
System.IO.Directory.CreateDirectory(strServerPath);
}
ds.Clear();
book.Close(true, path, Type.Missing);
// Exit excel application.
excel.Quit();
GC.Collect();
return true;
}
catch (Exception err)
{
logger.ErrorException("JWNQ010 ToExcel-New EXCEL:[" + err.Message.ToString() + "]", err);
return false;
}
}
利用模版
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

111,110

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧