我目前正在使用大量数据为我的工作场所创建和显示视觉上令人愉悦的文档,显示运动/运动数据列表.

我有一个专栏,我正在用它来展示这些运动的频道.然而,有些运动有多个频道,我决定把它们放在运动名称和运动时间旁边的同一个单元格中.附上的图像应该显示我得到的与我想要的相比

我不会提供我的所有代码,因为它是草率,和过度.但是,下面代码块中的概念应该足够了

// Create a new worksheet
var worksheet = package.Workbook.Worksheets.Add($"{DateTimeString} Lineup");

// Change all cells to font Calibri 24px
worksheet.Cells.Style.Font.Name = "Calibri";
worksheet.Cells.Style.Font.Size = 24;

// Merge cells A1:C1
worksheet.Cells["A1:C1"].Merge = true;
worksheet.Cells["A1:C1"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells["A1:C1"].Style.Font.Bold = true;
worksheet.Cells["A1:C1"].Style.Font.UnderLine = true;
worksheet.Cells["A1:C1"].Style.Border.BorderAround(ExcelBorderStyle.Thin);


// Set A1:C1 to "Sunday NFL Games"
worksheet.Cells["A1"].Value = $"{dayOfWeek} {League.LeagueNameShort} Games";

// Set A2 to "Time", B2 to "Channel", and C2 to "Games" + DateTime.Now.ToString("MM/dd/yyyy")
worksheet.Cells["A2"].Value = "Time";
worksheet.Cells["A2"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells["A2"].Style.Font.Bold = true;
worksheet.Cells["A2"].Style.Border.BorderAround(ExcelBorderStyle.Thin);
worksheet.Cells["B2"].Value = "Channel";
worksheet.Cells["B2"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells["B2"].Style.Font.Bold = true;
worksheet.Cells["B2"].Style.Border.BorderAround(ExcelBorderStyle.Thin);
worksheet.Cells["C2"].Value = "Games " + date.ToString("MM/dd/yyyy");
worksheet.Cells["C2"].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells["C2"].Style.Font.Bold = true;
worksheet.Cells["C2"].Style.Border.BorderAround(ExcelBorderStyle.Thin);

//Find Games
int row = 3;

foreach (SportDataExport ex in GetSportDataExport(DateTimeString, League).OrderBy(export => DateTime.ParseExact(export.GameTime, "h:mmtt", CultureInfo.InvariantCulture)))
{
    //Set Cell Values
    worksheet.Cells[row, 1].Value = ex.GameTime;
    worksheet.Cells[row, 2].Value = ex.Channels;
    worksheet.Cells[row, 3].Value = ex.Teams;

    if(ex.ChannelCount == 0)
    {
        worksheet.Row(row).Height = 31.5;
    }
    else
    {
        worksheet.Row(row).Height = 31.5 * ex.ChannelCount;
    }

    //Style Cells
    worksheet.Cells[row, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
    worksheet.Cells[row, 2].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
    worksheet.Cells[row, 3].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
    worksheet.Cells[row, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin);
    worksheet.Cells[row, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin);
    worksheet.Cells[row, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin);

    row = row + 1;
}

AutoSizeWorksheet(worksheet);
// Save the Excel package
FileInfo fileInfo = new FileInfo(filePath);
package.SaveAs(fileInfo);

我try 过手动设置行高、设置"WordWrap"和3种不同的NewLines方法.一旦用户打开Excel工作表,单击单元格并按Enter或通过 Select 另一个单元格退出单元格,该单元格就会被固定.

推荐答案

必须将Required列的WrapText属性设置为true:

worksheet.Cells["B2"].Style.WrapText = true;

然后,您可以使用Environment.NewLine将文本分成几行.


Here it is how this looks like in test example:

enter image description here

Csharp相关问答推荐

为什么使用DXGI输出复制和Direct 3D时捕获的图像数据全为零?

在WPF.NET 6中使用C++/WinRT组件(但实际上是任何WinRT组件)

Dapper是否可以自动扩展类成员

禁用AutoSuggestBox项目更改时的动画?

如何从泛型方法返回一个可为空的T,其中T:notnull?

Azure Redis缓存与Entra ID身份验证

当前的文化决定了错误的文化

我如何让我的秒表保持运行场景而不重置

反序列化私有成员

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

如何在onNext之前等待订阅者完成?

如何在mediatr命令中访问HttpContext而不安装弃用的nuget包

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

使用可空引用类型时C#接口实现错误

如何在单击按钮后多次异步更新标签

实例化列表时的集合表达式是什么?

我想我必须手动使用res1(字符串形式的PowerShell哈希表)

Avalonia MVVM数据模板

无法创建工具窗口(用于VBIDE、VBA的COM加载项扩展)

如何模拟一个返回OneOf IServiceA,IServiceB的方法?使用Moq