【问题标题】:How to merge multiple worksheets to a single worksheet with styles如何将多个工作表合并为具有样式的单个工作表
【发布时间】:2018-11-06 13:29:25
【问题描述】:

我知道,关于这个话题有很多问题,但我没有找到可用的解决方案。

我有多个 excel 文件,每个文件都有一个工作表,我想将工作表合并到一个工作簿和具有所有样式(列宽、单元格边框、填充颜色、字体大小等)的工作表。

怎么办,我试过Spire.Xls,但样式没有复制。

private void CombineFiles(List<string> files,string outputPath)
        {

            Spire.Xls.Workbook resultworkbook = new Spire.Xls.Workbook();
            Spire.Xls.Worksheet resultworksheet = resultworkbook.Worksheets.Add("worksheet");

            foreach (var file in files)
            {
                Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
                workbook.LoadFromFile(file);

                Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
                System.Data.DataTable dataTable = sheet.ExportDataTable();
                resultworksheet.InsertDataTable(dataTable, false, sheet.LastRow + 1, 1);
            }

            resultworkbook.SaveToFile(outputPath);
            System.Diagnostics.Process.Start(outputPath);
        }

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    如果您想在将多个工作表合并到一个工作表时复制样式,则应使用 CellRange.Copy() / Worksheet.Copy() 而不是 Worksheet.InsertDataTable()。另请注意,无法复制列宽,如果所有列宽都相同,则可以获取列宽然后设置为复制的列。

    试试下面的代码:

        static void Main(string[] args)
        {
            string outputPath = "‪output.xlsx";
            List<string> files = new List<string>();
            files.Add(@"File1.xlsx");
            files.Add(@"File2.xlsx");
            CombineFiles(files, outputPath);
        }
        private static void CombineFiles(List<string> files, string outputPath)
        {
            Spire.Xls.Workbook resultworkbook = new Spire.Xls.Workbook();
            resultworkbook.Worksheets.Clear();
            Spire.Xls.Worksheet resultworksheet = resultworkbook.Worksheets.Add("worksheet");
    
            Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
            for (int i = 0; i < files.Count; i++)
            {
                workbook.LoadFromFile(files[i]);
                Worksheet sheet = workbook.Worksheets[0];
                if (i == 0)
                {
                    sheet.AllocatedRange.Copy(resultworksheet.Range[1, 1], true, true);
    
                }
                else
                {
                    sheet.AllocatedRange.Copy(resultworksheet.Range[resultworksheet.LastRow + 1, 1], true, true);
                }
            }
    
    
            resultworkbook.SaveToFile(outputPath, ExcelVersion.Version2013);
            System.Diagnostics.Process.Start(outputPath);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-05
      • 2019-07-26
      • 2017-06-13
      • 2022-12-24
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多