Aspose.Cells 增加数据行的问题

我们用Aspose.Cells打开了Excel文件,读取了里面的数据,有一个问题想咨询一下,如果现在有一千行的数据,我现在想在里面增加一行数据,但实际出来的效果是把这一千行的数据给读出来了,而不是增加一行数据,请问有什么办法能解决吗?

@zg0x1231,

感谢您的查询。

我不完全确定你的问题或要求。您能否详细说明并提供有关完成任务所需内容的更多详细信息。您还可以共享示例代码(可运行),模板(输入和输出文件)文件,屏幕截图等。此外,提供您想要的预期文件(您可以在MS Excel中手动创建它们)以及如何在MS Excel中手动执行此操作的详细步骤。所有这些都将帮助我们真正准确地评估您的问题并帮助您解决问题。

我的意思是:假设我电脑上现有一个Excel文件,里面有1000行数据,我想实现往最底下一行(第1001行)写一行数据,我发现你们的DLL是将现有的1000行先读出来再跟我要写入的数据加一块一起写入到Excel,这样的效率太低了。

@zg0x1231,

您似乎想要将现有数据末尾的一些数据附加到模板文件的工作表中,但它不应更改现有数据。好吧,您可能认为这种行为就像将一些文本附加到文本文件的末尾(尾部)。事实上,它完全不同。请注意,对于MS Excel文件,在向工作簿添加新数据时,有许多因素会影响工作簿/工作表的其余部分或全局缓存。简而言之,它不能只将额外数据写入现有MS Excel文件的末尾。

/// <summary>
/// DataTable数据导出Excel
/// </summary>
/// <param name="data"></param>
/// <param name="filepath"></param>
public static void DataTableExport(DataTable data, string filepath)
{
    try
    {
        Workbook book = new Workbook(); //创建工作簿
        Worksheet sheet = book.Worksheets[0]; //创建工作表
        Cells cells = sheet.Cells; //单元格
                                    //创建样式
        Aspose.Cells.Style style = book.Styles[book.Styles.Add()];
        style.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 左边界线  
        style.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 右边界线  
        style.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 上边界线  
        style.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应用边界线 下边界线   
        style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中
        style.Font.Name = "宋体"; //字体
                                //style1.Font.IsBold = true; //设置粗体
        style.Font.Size = 11; //设置字体大小
                                //style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景色
                                //style.Pattern = Aspose.Cells.BackgroundType.Solid;  

        int Colnum = data.Columns.Count;//表格列数 
        int Rownum = data.Rows.Count;//表格行数 
                                        //生成行 列名行 
        for (int i = 0; i < Colnum; i++)
        {
            cells[0, i].PutValue(data.Columns[i].ColumnName); //添加表头
            cells[0, i].SetStyle(style); //添加样式
        }
        //生成数据行 
        for (int i = 0; i < Rownum; i++)
        {
            for (int k = 0; k < Colnum; k++)
            {
                cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据
                cells[1 + i, k].SetStyle(style); //添加样式
            }
        }
        sheet.AutoFitColumns(); //自适应宽
        book.Save(filepath); //保存
        GC.Collect();
    }
    catch (Exception e)
    {
        logger.Error("生成excel出错:" + e.Message);
    }
}

我只想实现将数据写入现有Excel文件的末尾,以上代码是实现了我的需求但是效率非常低,有没有办法能够优化呢?

@zg0x1231,

感谢您的代码段。

您的代码段对我来说似乎没问题。如果它适合您的需要,您可以尝试进一步增强它。例如,如果要从DataTable导入数据,最好一次使用数据导入选项,而不是浏览数据表中的每个记录并按单元格逐个粘贴,请参阅文档以供参考:

感谢您的回复,为了更清晰的表达我的需求,我画了一个图进行说明,请看图片
image.png (37.3 KB)

@zg0x1231,

谢谢截图。

我无法理解你在截图中的评论,因为它们是用中文写的。您可以用英文撰写评论或在单独的文本中写下您的请求/问题(即使是中文),这样我们就能更好地了解您。