最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Npoi導(dǎo)出Excel并合并行列

 更新時(shí)間:2022年02月21日 14:17:27   作者:曹悠然  
這篇文章主要為大家詳細(xì)介紹了C#使用Npoi導(dǎo)出Excel并合并行列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在工作開發(fā)中,客戶經(jīng)常要求數(shù)據(jù)庫(kù)中數(shù)據(jù)導(dǎo)出到Excel表格。以前方法是引用office相關(guān)組件,如果客戶沒(méi)有安裝office,功能就會(huì)遇到問(wèn)題。

現(xiàn)在用Npoi導(dǎo)出Excel,導(dǎo)出表格是合并行列,如圖:

導(dǎo)出的要求:合計(jì)列要進(jìn)行合并,序號(hào)一致的要合并。最后一行要合并列。
因?yàn)橄嗤蛱?hào)數(shù)量不是固定的,要?jiǎng)討B(tài)算合并的行數(shù)。

合并行列接口:XXX.AddMergedRegion(new CellRangeAddress(開始行, 最后一行, 開始列, 最后一列));

隱藏指定:sheet.SetColumnHidden(cellIndex, true);

引用組件:

NPOI.dll;
NPOI.OOXML.dll;
NPOI.OpenXml4Net.dll;
NPOI.OpenXmlFormats.dll;
ICSharpCode.SharpZipLib.dll;

代碼如下:

/// <summary>
///?
/// </summary>
/// <param name="dtSource">數(shù)據(jù)源</param>
/// <param name="strFileName">保存路徑</param>
/// <param name="dvXH">序號(hào)</param>
public void Export(DataTable dtSource,string strFileName,DataView dvXH=null)
? ? ? ? {
? ? ? ? ? ? //創(chuàng)建工作簿 office2007以上
? ? ? ? ? ? XSSFWorkbook workbook = new XSSFWorkbook();
? ? ? ? ? ? //為工作簿創(chuàng)建工作表并命名
? ? ? ? ? ? ISheet sheet = workbook.CreateSheet("商品表");

? ? ? ? ? ? ICellStyle dateStyle = workbook.CreateCellStyle();

? ? ? ? ? ? IDataFormat format = workbook.CreateDataFormat();
? ? ? ? ? ? dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");

? ? ? ? ? ? #region 表頭及樣式
? ? ? ? ? ? int cellIndex = 0;
? ? ? ? ? ? IRow headerRow = sheet.CreateRow(0);
? ? ? ? ? ? for (int i = 0; i < dtSource.Columns.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? #region MyRegion
? ? ? ? ? ? ? ? string ColumnsName = dtSource.Columns[i].ToString();
? ? ? ? ? ? ? ? if (dtSource.Columns[i].ColumnName.EndsWith("XH"))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ColumnsName = "序號(hào)";
? ? ? ? ? ? ? ? ? ? sheet.SetColumnWidth(cellIndex, 3000);
? ? ? ? ? ? ? ? ? ?//sheet.SetColumnHidden(cellIndex, true);隱藏指定列
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if (dtSource.Columns[i].ColumnName.EndsWith("GoogName"))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ColumnsName = "商品名稱";
? ? ? ? ? ? ? ? ? ? sheet.SetColumnWidth(cellIndex,10000);//設(shè)置列寬
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else if (dtSource.Columns[i].ColumnName.EndsWith("Num"))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ColumnsName = "數(shù)量";
? ? ? ? ? ? ? ? ? ? sheet.SetColumnWidth(cellIndex, 5000);
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else if (dtSource.Columns[i].ColumnName.EndsWith("Summation"))
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ColumnsName = "合計(jì)(元)";
? ? ? ? ? ? ? ? ? ? sheet.SetColumnWidth(cellIndex, 5000);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? #endregion

? ? ? ? ? ? ? ? //設(shè)置行高
? ? ? ? ? ? ? ? headerRow.HeightInPoints = 35;?
? ? ? ? ? ? ? ? headerRow.CreateCell(cellIndex).SetCellValue(ColumnsName);

? ? ? ? ? ? ? ? ICellStyle headStyle = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? headStyle.WrapText = true;
? ? ? ? ? ? ? ? IFont font = workbook.CreateFont();
? ? ? ? ? ? ? ? //字體大小
? ? ? ? ? ? ? ? font.FontHeightInPoints = 12;
? ? ? ? ? ? ? ? font.Boldweight = 360;
? ? ? ? ? ? ? ? headStyle.SetFont(font);
? ? ? ? ? ? ? ? headerRow.GetCell(cellIndex).CellStyle = headStyle;
? ? ? ? ? ? ? ? cellIndex++;
? ? ? ? ? ? }
? ? ? ? ? ? #endregion

? ? ? ? ? ? int rowIndex = 1;//行數(shù)一定要從1行開始
? ? ? ? ? ? int count = 1;
? ? ? ? ? ? int startRow = 1;
? ? ? ? ? ? DataView dvSource = dtSource.DefaultView;
? ? ? ? ? ? if (dvXH!=null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach (DataRowView drv in dvXH)
? ? ? ? ? ? ? ? {//1-10.11-12,13-14,15-16
? ? ? ? ? ? ? ? ? ? int rowcout = 0;
? ? ? ? ? ? ? ? ? ? dvSource.RowFilter = "XH='" + drv["XH"] + "'";
? ? ? ? ? ? ? ? ? ? foreach (DataRowView row in dvSource)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? #region 填充內(nèi)容
? ? ? ? ? ? ? ? ? ? ? ? IRow dataRow = sheet.CreateRow(rowIndex);

? ? ? ? ? ? ? ? ? ? ? ? //序號(hào)
? ? ? ? ? ? ? ? ? ? ? ? ICell newCel0 = dataRow.CreateCell(0);
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle style0 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? style0.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? ? ? newCel0.SetCellValue(row["XH"].ToString());

? ? ? ? ? ? ? ? ? ? ? ? //標(biāo)的名稱
? ? ? ? ? ? ? ? ? ? ? ? ICell newCel2 = dataRow.CreateCell(1);
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle style2 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? style2.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? ? ? newCel2.SetCellValue(row["GoogName"].ToString());

? ? ? ? ? ? ? ? ? ? ? ? //標(biāo)的數(shù)量
? ? ? ? ? ? ? ? ? ? ? ? ICell newCel4 = dataRow.CreateCell(2);
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle style4 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? style4.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? ? ? newCel4.SetCellValue(row["Num"].ToString());

? ? ? ? ? ? ? ? ? ? ? ? //合計(jì)(元)
? ? ? ? ? ? ? ? ? ? ? ? ICell newCel8 = dataRow.CreateCell(3);
? ? ? ? ? ? ? ? ? ? ? ? ICellStyle style8 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? ? ? style8.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? ? ? newCel8.SetCellValue(row["Summation"].ToString());
? ? ? ? ? ? ? ? ? ? ? ? #endregion

? ? ? ? ? ? ? ? ? ? ? ? rowIndex++;
? ? ? ? ? ? ? ? ? ? ? ? rowcout++;
? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? if (count == 1)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? //合并行數(shù)
? ? ? ? ? ? ? ? ? ? ? ? sheet.AddMergedRegion(new CellRangeAddress(startRow, rowcout, 3, 3));
? ? ? ? ? ? ? ? ? ? ? ? startRow = startRow + rowcout;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? sheet.AddMergedRegion(new CellRangeAddress(startRow, startRow + rowcout - 1, 3, 3));
? ? ? ? ? ? ? ? ? ? ? ? startRow = startRow + rowcout;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? count++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? #region MyRegion
? ? ? ? ? ? ? ? foreach (DataRowView row in dvSource)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? #region 填充內(nèi)容
? ? ? ? ? ? ? ? ? ? IRow dataRow = sheet.CreateRow(rowIndex);

? ? ? ? ? ? ? ? ? ? //序號(hào)
? ? ? ? ? ? ? ? ? ? ICell newCel0 = dataRow.CreateCell(0);
? ? ? ? ? ? ? ? ? ? ICellStyle style0 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? style0.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? newCel0.SetCellValue(row["XH"].ToString());
? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? //商品名稱
? ? ? ? ? ? ? ? ? ? ICell newCel1 = dataRow.CreateCell(1);
? ? ? ? ? ? ? ? ? ? ICellStyle style1 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? style1.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? newCel1.SetCellValue(row["GoogName"].ToString());

? ? ? ? ? ? ? ? ? ? //數(shù)量
? ? ? ? ? ? ? ? ? ? ICell newCel2 = dataRow.CreateCell(2);
? ? ? ? ? ? ? ? ? ? ICellStyle style2 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? style2.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? newCel2.SetCellValue(row["Num"].ToString());
? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? //合計(jì)(元)
? ? ? ? ? ? ? ? ? ? ICell newCel3 = dataRow.CreateCell(3);
? ? ? ? ? ? ? ? ? ? ICellStyle style3 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? style3.DataFormat = format.GetFormat("text");
? ? ? ? ? ? ? ? ? ? newCel3.SetCellValue(row["Summation"].ToString());
? ? ? ? ? ? ? ? ? ? #endregion
? ? ? ? ? ? ? ? ? ? rowIndex++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? #endregion
? ? ? ? ? ? }
? ? ? ? ? ? #region 拼接最后一行
? ? ? ? ? ? IFont fontLast = workbook.CreateFont();
? ? ? ? ? ? fontLast.FontHeightInPoints = 30;
? ? ? ? ? ? fontLast.Boldweight = 480;
? ? ? ? ? ? IRow dataRowLast = sheet.CreateRow(rowIndex);
? ? ? ? ? ? dataRowLast.HeightInPoints = 40;
? ? ? ? ? ? ICell newCelLast = dataRowLast.CreateCell(0);
? ? ? ? ? ? ICellStyle styleLast = workbook.CreateCellStyle();
? ? ? ? ? ? styleLast.DataFormat = format.GetFormat("text");
? ? ? ? ? ? styleLast.SetFont(fontLast);
? ? ? ? ? ? newCelLast.SetCellValue("制作人:張三");
? ? ? ? ? ? sheet.AddMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 0, 3));
? ? ? ? ? ? #endregion

? ? ? ? ? ? MemoryStream stream = new MemoryStream();
? ? ? ? ? ? workbook.Write(stream);
? ? ? ? ? ? var buf = stream.ToArray();
? ? ? ? ? ? using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? fs.Write(buf, 0, buf.Length);
? ? ? ? ? ? ? ? fs.Flush();
?           }
} 

實(shí)際運(yùn)用中,涉及到數(shù)據(jù),方法中有很多校驗(yàn)等操作,方法直觀可讀性不是太好,下面附上簡(jiǎn)單導(dǎo)出的方法:

實(shí)際上導(dǎo)出Excel,總結(jié)有幾點(diǎn):

1、引用相關(guān)組件
2、創(chuàng)建一個(gè)工作簿,創(chuàng)建工作表并命名;
3、設(shè)置表頭及樣式;
4、填充數(shù)據(jù);
5、保存數(shù)據(jù)到指定位置;

/// <summary>
/// 簡(jiǎn)單導(dǎo)出數(shù)據(jù)
/// </summary>
/// <param name="dtSource">數(shù)據(jù)源</param>
/// <param name="strFileName">保存路徑</param>
/// <param name="dvXH">序號(hào)</param>
? ? ? ? public void Export1(DataTable dtSource, string strFileName)
? ? ? ? {
? ? ? ? ? ? //創(chuàng)建工作簿
? ? ? ? ? ? XSSFWorkbook workbook = new XSSFWorkbook();
? ? ? ? ? ? //為工作簿創(chuàng)建工作表并命名
? ? ? ? ? ? ISheet sheet = workbook.CreateSheet("商品表");
? ? ? ? ? ? IDataFormat format = workbook.CreateDataFormat();

? ? ? ? ? ? #region 表頭及樣式
? ? ? ? ? ? int cellIndex = 0;
? ? ? ? ? ? IRow headerRow = sheet.CreateRow(0);
? ? ? ? ? ? for (int i = 0; i < dtSource.Columns.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //設(shè)置行高
? ? ? ? ? ? ? ? headerRow.HeightInPoints = 35;
? ? ? ? ? ? ? ? headerRow.CreateCell(cellIndex).SetCellValue(dtSource.Columns[i].ToString());
? ? ? ? ? ? ? ? ICellStyle headStyle = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? headStyle.WrapText = true;
? ? ? ? ? ? ? ? IFont font = workbook.CreateFont();
? ? ? ? ? ? ? ? //字體大小
? ? ? ? ? ? ? ? font.FontHeightInPoints = 12;
? ? ? ? ? ? ? ? font.Boldweight = 360;
? ? ? ? ? ? ? ? headStyle.SetFont(font);
? ? ? ? ? ? ? ? headerRow.GetCell(cellIndex).CellStyle = headStyle;
? ? ? ? ? ? ? ? cellIndex++;
? ? ? ? ? ? }
? ? ? ? ? ? #endregion

? ? ? ? ? ? #region 數(shù)據(jù)填充
? ? ? ? ? ? int rowIndex = 1;//行數(shù)一定要從1行開始,因?yàn)樯厦嬉呀?jīng)創(chuàng)建了表頭為0行;
? ? ? ? ? ? DataView dvSource = dtSource.DefaultView;

? ? ? ? ? ? foreach (DataRow row in dtSource.Rows)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? int ColumnIndex = 0;
? ? ? ? ? ? ? ? IRow dataRow = sheet.CreateRow(rowIndex);
? ? ? ? ? ? ? ? foreach (DataColumn column in dtSource.Columns)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //序號(hào)
? ? ? ? ? ? ? ? ? ? ICell newCel0 = dataRow.CreateCell(ColumnIndex);
? ? ? ? ? ? ? ? ? ? ICellStyle style0 = workbook.CreateCellStyle();
? ? ? ? ? ? ? ? ? ? style0.DataFormat = format.GetFormat("text");//數(shù)據(jù)類型
? ? ? ? ? ? ? ? ? ? newCel0.SetCellValue(row[column.ColumnName].ToString());
? ? ? ? ? ? ? ? ? ? ColumnIndex++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? rowIndex++;
? ? ? ? ? ? }
? ? ? ? ? ? #endregion

? ? ? ? ? ? #region 保存到指定位置
? ? ? ? ? ? MemoryStream stream = new MemoryStream();
? ? ? ? ? ? workbook.Write(stream);
? ? ? ? ? ? var buf = stream.ToArray();
? ? ? ? ? ? using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? fs.Write(buf, 0, buf.Length);
? ? ? ? ? ? ? ? fs.Flush();
? ? ? ? ? ? }
? ? ? ? ? ? #endregion

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# null 合并運(yùn)算符??(雙問(wèn)號(hào))使用示例

    C# null 合并運(yùn)算符??(雙問(wèn)號(hào))使用示例

    這篇文章主要介紹了C# null 合并運(yùn)算符??(雙問(wèn)號(hào))使用示例,?? 運(yùn)算符稱作 null 合并運(yùn)算符。如果此運(yùn)算符的左操作數(shù)不為 null,則此運(yùn)算符將返回左操作數(shù);否則返回右操作數(shù),需要的朋友可以參考下
    2014-06-06
  • C#常用目錄文件操作類實(shí)例

    C#常用目錄文件操作類實(shí)例

    這篇文章主要介紹了C#常用目錄文件操作類,實(shí)例分析了C#針對(duì)目錄的讀取、檢測(cè)及查找等相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • c#深拷貝文件夾示例

    c#深拷貝文件夾示例

    這篇文章主要介紹了c#深拷貝文件夾示例,需要的朋友可以參考下
    2014-04-04
  • C#實(shí)現(xiàn)自定義雙擊事件

    C#實(shí)現(xiàn)自定義雙擊事件

    這篇文章主要介紹了C#實(shí)現(xiàn)自定義雙擊事件,需要的朋友可以參考下
    2014-08-08
  • 最新評(píng)論

    丰都县| 吴旗县| 建湖县| 囊谦县| 牟定县| 金华市| 全州县| 伊金霍洛旗| 海南省| 临汾市| 台中县| 肥西县| 龙川县| 赫章县| 阜新市| 永丰县| 法库县| 扎鲁特旗| 凭祥市| 姚安县| 资中县| 廉江市| 安顺市| 翁源县| 罗田县| 盐源县| 马山县| 周口市| 嵊州市| 雷波县| 方山县| 沙雅县| 马山县| 楚雄市| 阜平县| 金塔县| 乡城县| 呼和浩特市| 昭通市| 建湖县| 高州市|