DataTable转excel为什么没有表头?

您好,感谢您的查看和帮助!
我在使用Aspose.Cells遇到了问题,DataTable有表头的,但是生成的excel没有表头。

我像您提供部分关于Aspose.Cells的代码!

        // 实例化表示 excel 文件的工作簿对象。
        Workbook wb = new Workbook();

        // 当您创建一个新的工作簿时,默认的“ sheet1”将添加到工作簿中
        Worksheet sheet = wb.Worksheets[0];
        sheet.Name = "文件级";
        //自定义第一行样式
        Style style1 = wb.Styles[wb.Styles.Add()];//新增样式
        style1.HorizontalAlignment = TextAlignmentType.Center;//文字居中
        style1.Font.Name = "宋体";//文字字体
        style1.Font.Size = 12;//文字大小
        //style1.Font.IsBold = true;//粗体
        style1.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线                                                                                
        style1.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
        style1.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //应用边界线 上边界线
        style1.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //应用边界线 下边界线
        style1.IsLocked = false;//单元格解锁
        style1.ForegroundColor = Color.Aqua;// Color.Orange;//橙色
        style1.Pattern = BackgroundType.Solid;

        //档案数字化处理工作月统计表第一行
        Cells cells1 = sheet.Cells;

       //第一行高
        cells1.SetRowHeight(0, 40);//设置行高   
        //cells1.ApplyStyle(style1, new StyleFlag() { All = true });        

        //excel数据列 循环列添加样式
        for (int i = 0; i <= 17; i++)
        {
            cells1[0, i].SetStyle(style1);
            cells1.SetColumnWidth(i, 10);
        }

        //第二行样式
        Style style2 = TwoStyle(wb);

        //添加数据单元格
        Cells cells = sheet.Cells;
        //访问表格中的“ a1”单元格。         
        Cell cell = sheet.Cells["A1"];

        //创建数据表
        DataTable dt = new DataTable();

        //添加列名
        for (int i = 0; i < wj.Length; i++)
        {
            dt.Columns.Add($"Column{i}", Type.GetType("System.String"));
        }


        //生成数据行 
        for (int i = 0; i < dt.Rows.Count; i++)
        {

            //第二行读取数据
            int v = i;

            //单元格
            for (int k = 0; k < dt.Columns.Count; k++)
            {
                //值
                string value = dt.Rows[i][k].ToString();
                cells[v, k].PutValue(value);

                //设置样式
                cells[v, k].SetStyle(style2);
                //行高
                cells.SetRowHeight(v, 30);//设置行高                 
            }

        }

@fhn123456,

通过检查您的示例代码段,我无法发现您将表的标题插入/输入到工作表单元格的任何代码行。 上面的行将插入数据记录/行而不是列/字段或标题。 因此,请明确编写代码行以将标题文本(字段或列名称)输入/插入到工作表的相应单元格中。 此外,您的代码不完整且无法运行,有些对象/变量我不确定。 如果您仍然无法评估或完成您的任务,请分享一个独立的控制台应用程序(没有编译错误的源代码),压缩项目并提供给我们,我们会尽快检查。

顺便说一句,我们有特定的数据导入选项,您应该使用这些选项来一次性导入您的数据表,并且标题/列名完好无损,请参阅[文档]以供参考。

感谢您的回复!
我使用如下代码完成了需求,以下代码可以输出DataTable里面的表头:

            //可用
            ImportTableOptions options = new ImportTableOptions();
            //默认为真
            options.IsFieldNameShown = false;
            //从第二行,第一列开始输出DataTable
            cells.ImportData(dt, 1, 0, options);

我将像您展示截图,
代码调试DataTable有表头,如下图:
360截图184307075774103.jpg (112.0 KB)

然而输出的excel却没有表头,如下图:
360截图18720114706579.jpg (103.1 KB)

解决办法:

            //生成行 列名行 DataTable表头
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                cells[1, i].PutValue(dt.Columns[i].ColumnName); //添加表头
                //cells[1, i].SetStyle(style); 
                //添加样式
                //cells.SetColumnWidth(i, data.Columns[i].ColumnName.Length * 2 + 1.5); //自定义列宽
                //cells.SetRowHeight(0, 30); //自定义高
            }

@fhn123456,

如果您需要在输出的excel中生成表头,请将 options.IsFieldNameShown 设为true,该属性表明在导入数据的同时是否需要导入表头(false为不导入)