.net系列-ClosedXML,ExcelWorksheet,Workbook.Worksheets或ExcelPackage如何导出表格?如何自动宽度,根据内容调整行高和列宽

news/2024/9/27 1:35:55

问题描述

    1. 本文介绍两种.net导出表格的方案
    1. 在我们使用.net的表格工具的时候,导出表格的宽度和高度默认的总是很窄,字体都挤在一起,如何让它自适应呢?下面介绍两个库的自适应代码写法

使用ClosedXML也就是XLWorkbook

github文档: https://github.com/ClosedXML/ClosedXML

using ClosedXML.Excel;
using System;
using System.Collections.Generic;
using System.Linq;var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Adjust To Contents");// Set some values with different font sizes
ws.Cell(1, 1).Value = "Tall Row";
ws.Cell(1, 1).Style.Font.FontSize = 30;
ws.Cell(2, 1).Value = "Very Wide Column";
ws.Cell(2, 1).Style.Font.FontSize = 20;// Adjust column width
ws.Column(1).AdjustToContents(); // 自适应关键代码// Adjust row heights
ws.Rows(1, 2).AdjustToContents(); // 自适应关键代码// You can also adjust all rows/columns in one shot
// ws.Rows().AdjustToContents();
// ws.Columns().AdjustToContents();// We'll now select which cells should be used for calculating the
// column widths (same method applies for row heights)// Set the values
ws.Cell(4, 2).Value = "Width ignored because calling column.AdjustToContents(5, 7)";
ws.Cell(5, 2).Value = "Short text";
ws.Cell(6, 2).Value = "Width ignored because it's part of a merge";
ws.Range(6, 2, 6, 4).Merge();
ws.Cell(7, 2).Value = "Width should adjust to this cell";
ws.Cell(8, 2).Value = "Width ignored because calling column.AdjustToContents(5, 7)";// Adjust column widths only taking into account rows 5-7
// (merged cells will be ignored)
ws.Column(2).AdjustToContents(5, 7);// You can also specify the row to start calculating the widths:
// e.g. ws.Column(3).AdjustToContents(9);wb.SaveAs("AdjustToContents.xlsx");

使用XLWorkbook实战案例(支持多个子表)

模拟传参

{"fileName": "aaaa.xlsx","data": [{"sheetName": "1111111","sheetTitle": {"additionalProp1": "qqq","additionalProp2": "www","additionalProp3": "eee"},"SheetData": [{"additionalProp1": "111","additionalProp2": "222","additionalProp3": "333"},{"additionalProp1": "111111111","additionalProp2": "22222222222222","additionalProp3": "33333333333333"}]}]
}

类型定义

 public class ExportSheetModel{public string SheetName { get; set; }public Dictionary<string, string> SheetTitle { get; set; }public List<Dictionary<string, string>> SheetData { get; set; }}public class ExportDataModel{public string FileName { get; set; }public List<ExportSheetModel> Data { get; set; }}

方法函数

  public Stream ExportData(List<ExportSheetModel> fileDataModel){var stream = new MemoryStream();using (var workbook = new XLWorkbook()){foreach (var filesheetData in fileDataModel){var worksheet = workbook.Worksheets.Add(filesheetData.SheetName);int colIndex = 1;foreach (var title in filesheetData.SheetTitle.Values){worksheet.Cell(1, colIndex++).Value = title;}int rowIndex = 2;foreach (var record in filesheetData.SheetData){colIndex = 1;foreach (var item in record){worksheet.Cell(rowIndex, colIndex++).Value = item.Value ?? "";worksheet.Column(colIndex).AdjustToContents(); // 关键代码,这个是设置了自定义宽度}rowIndex++;}}workbook.SaveAs(stream);stream.Seek(0, SeekOrigin.Begin);return stream;}}

使用ExcelPackage

  • 文档:http://excelpackage.codeplex.com/
  • 安装EPPlus NuGet程序包,使用ExcelPackage类
using System.Data;
using System.IO;
using System.Reflection;
using OfficeOpenXml;public IActionResult Export(){try{MemoryStream stream = new MemoryStream();using (ExcelPackage package = new ExcelPackage()){ExcelWorksheet sheet = package.Workbook.Worksheets.Add("Data Attribute Type");for (int c = 0; c < 5; c++){int r = 0;sheet.Cells[r + 2, c + 1].Value = colValue;sheet.Cells.AutoFitColumns(); // 关键代码:自适应宽度sheet.Cells[r + 2, c + 1].Hyperlink = new Uri(colValue.ToString());r++;}package.SaveAs(stream);stream.Seek(0, SeekOrigin.Begin);}string fileName = "test.xlsx";return File(stream, "application/octet-stream", fileName);}catch (Exception ex){// this._logger.LogError(ex.Message);}return NotFound();}

待补充其他方案

结语

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65231.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

图文并茂手把手教你macOS 上安裝并运行 .NET8应用(.net6也可以用哦)

快速起步 官方网址:https://learn.microsoft.com/zh-tw/dotnet/core/install/macos版本选择 installer版本:它包含了所有必须文件和帮助文档等,执行exe文件通过弹出的指示即可以安装软件。 binary版本:它是一个二进制包,里面包括了编译好的可以直接使用的程序,只需要把它…

Lab4 记录

Part A:无快照的KVServers KVServer整体结构如下每个KvServer对应一个Raft Server,该Raft Server可能是Leader或FollowerClient向KVServer发送请求,如果该KVServer对应的Raft Server不是Leader,直接返回Error,Clerk向其他KVServer发起请求 KVServer将命令提交到Raft Leader…

leetcode322 零钱兑换

leetcode322 零钱兑换思路:分析可知这是一道完全背包问题,主要代码为 for (int j = 0; j < coins.length; j++) {if (coins[j] <= i) {dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);} }但是要注意边界情况的处理,首先dp[0]赋值为0,所有元素赋值为最大值+1,这样在…

企业数字化转型项目顶层规划方案

企业数字化转型项目顶层规划方案

2024秋软件工程结对作业(第一次之需求分析和原型设计)

软件工程课程 班级链接作业要求 作业链接作业目标 需求分析和原型设计学号 102201312队友 102201311张硕使用墨刀构建原型,原型链接:请点击我客户现实困扰 ​ 在大学里,一些有想法的学生希望通过发起或参与跨专业的项目(创业、学术)来提升自己的综合能力,拓宽知识面和积累…

软件工程第一次结对作业《福大Team》

软件工程课程 班级链接作业要求 作业链接作业目标 需求分析和原型设计学号 102201311队友 102201312陈言泷使用墨刀构建原型,原型链接:请点击我客户现实困扰 ​ 在大学里,一些有想法的学生希望通过发起或参与跨专业的项目(创业、学术)来提升自己的综合能力,拓宽知识面和积…

讲的好!!!

若有侵权,请联系删除!!!

易优CMS后台上传图片报错mkdir(): Permission denied 报错-eyoucms

当你在易优CMS后台上传图片时遇到“mkdir(): Permission denied”的错误提示时,通常是因为文件系统的权限设置不当。以下是一些具体的解决步骤: 步骤 1:检查目录权限确定问题目录确认出现问题的目录是 /core/library/think/cache/driver/File.php。 实际上,问题可能出现在其…