You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Aspose .NET 6中将Excel文件表头设置为帕斯卡命名法

解决Aspose.Cells导入JSON时表头转为帕斯卡命名法的问题

问题场景

现有一段使用Aspose.Cells将JSON数组映射为Excel文件的代码,生成的Excel表头为小写格式,需要将表头改为帕斯卡命名法(首字母大写,后续单词首字母也大写,无下划线)。尝试通过Worksheet的PageSetup设置表头,但未找到相关配置项,不清楚该通过预处理JSON还是Aspose自身方法实现。

现有JSON转Excel代码

private async Task<string> JsonToExcel(string jsonString)
{
    try
    {
        Workbook workbook = new();
        Worksheet worksheet = workbook.Worksheets[0];
        // Set JsonLayoutOptions
        JsonLayoutOptions options = new();
        options.ArrayAsTable = true;
        // Import JSON Data
        JsonUtility.ImportData(jsonString, worksheet.Cells, 0, 0, options);
        // Save Excel file
        Guid guid = Guid.NewGuid();
        string filename = DateTimeOffset.Now.ToString("yyyy_MM_dd") + guid.ToString() + ".xlsx";
        string path = _hostEnvironment.ContentRootPath + "Output\\";
        worksheet.PageSetup.PrintGridlines = true;
        worksheet.PageSetup.FitToPagesWide = 1;
        workbook.Save(path + filename, SaveFormat.Xlsx);
        return (path + filename);
    }
    catch (Exception)
    {
        throw;
    }
}

无效尝试(PageSetup设置)

// Instantiating a Workbook object
Workbook excel = new Workbook();
// Obtaining the reference of the PageSetup of the worksheet
PageSetup pageSetup = excel.Worksheets[0].PageSetup;
// Setting worksheet name at the left section of the header
pageSetup.SetHeader(0, "&A");

可行解决方案

方案1:预处理JSON,将键转为帕斯卡命名法后再导入

先解析JSON对象,把所有键名转换为帕斯卡格式,再重新序列化为JSON字符串,最后用Aspose导入。这里以Newtonsoft.Json为例:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

private string ConvertJsonKeysToPascalCase(string jsonString)
{
    var jArray = JArray.Parse(jsonString);
    var convertedArray = new JArray();

    foreach (JObject obj in jArray)
    {
        var newObj = new JObject();
        foreach (var prop in obj.Properties())
        {
            // 将小写键转为帕斯卡命名法
            string pascalKey = ToPascalCase(prop.Name);
            newObj.Add(pascalKey, prop.Value);
        }
        convertedArray.Add(newObj);
    }

    return convertedArray.ToString(Formatting.None);
}

private string ToPascalCase(string input)
{
    if (string.IsNullOrEmpty(input))
        return input;
    
    // 处理下划线分隔的情况(如果有的话),先拆分再转帕斯卡
    var words = input.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries);
    return string.Concat(words.Select(word => char.ToUpper(word[0]) + word.Substring(1).ToLower()));
}

修改原JsonToExcel方法,先处理JSON:

private async Task<string> JsonToExcel(string jsonString)
{
    try
    {
        // 预处理JSON,转换键为帕斯卡命名法
        string processedJson = ConvertJsonKeysToPascalCase(jsonString);
        
        Workbook workbook = new();
        Worksheet worksheet = workbook.Worksheets[0];
        JsonLayoutOptions options = new();
        options.ArrayAsTable = true;
        JsonUtility.ImportData(processedJson, worksheet.Cells, 0, 0, options);
        
        // 后续保存逻辑不变
        Guid guid = Guid.NewGuid();
        string filename = DateTimeOffset.Now.ToString("yyyy_MM_dd") + guid.ToString() + ".xlsx";
        string path = _hostEnvironment.ContentRootPath + "Output\\";
        worksheet.PageSetup.PrintGridlines = true;
        worksheet.PageSetup.FitToPagesWide = 1;
        workbook.Save(path + filename, SaveFormat.Xlsx);
        return (path + filename);
    }
    catch (Exception)
    {
        throw;
    }
}

方案2:导入Excel后,直接修改表头单元格内容

如果不想修改JSON,可以在Aspose导入数据后,遍历第一行的所有单元格,将文本转为帕斯卡命名法:

private async Task<string> JsonToExcel(string jsonString)
{
    try
    {
        Workbook workbook = new();
        Worksheet worksheet = workbook.Worksheets[0];
        JsonLayoutOptions options = new();
        options.ArrayAsTable = true;
        JsonUtility.ImportData(jsonString, worksheet.Cells, 0, 0, options);
        
        // 修改表头为帕斯卡命名法
        Range headerRange = worksheet.Cells.Rows[0];
        foreach (Cell cell in headerRange)
        {
            if (!string.IsNullOrEmpty(cell.StringValue))
            {
                cell.PutValue(ToPascalCase(cell.StringValue));
            }
        }
        
        // 后续保存逻辑不变
        Guid guid = Guid.NewGuid();
        string filename = DateTimeOffset.Now.ToString("yyyy_MM_dd") + guid.ToString() + ".xlsx";
        string path = _hostEnvironment.ContentRootPath + "Output\\";
        worksheet.PageSetup.PrintGridlines = true;
        worksheet.PageSetup.FitToPagesWide = 1;
        workbook.Save(path + filename, SaveFormat.Xlsx);
        return (path + filename);
    }
    catch (Exception)
    {
        throw;
    }
}

// 复用帕斯卡转换方法
private string ToPascalCase(string input)
{
    if (string.IsNullOrEmpty(input))
        return input;
    
    var words = input.Split(new[] {'_'}, StringSplitOptions.RemoveEmptyEntries);
    return string.Concat(words.Select(word => char.ToUpper(word[0]) + word.Substring(1).ToLower()));
}

说明

Aspose.Cells的JsonUtility.ImportData方法目前没有直接配置表头命名格式的选项,因此只能通过上述两种方式实现:

  • 方案1适合需要在源头统一修改键名的场景;
  • 方案2更适合仅需要修改Excel显示表头,不改变原始JSON结构的场景。

内容的提问来源于stack exchange,提问作者Osama Mirza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:10:35