Можно ли добавить несколько файлов .xls в одну таблицу Excel 2003 без Office Interop? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть ASP.NET Web API, и мне нужно реализовать эту функцию для будущей версии.В частности:

  • Несколько файлов .xls будут помещены во временную папку.Они имеют одинаковую ширину, но разную высоту, а также разные размеры строк и столбцов.
  • Файлы должны быть добавлены в один файл .xls
  • В конечном Excel не может быть несколько рабочих листов.
  • Невозможно использовать библиотеки Office Interop, поскольку Office не установлен и не может быть установлен в среде развертывания.

Есть ли способ сделать это без использования библиотек взаимодействия Office в качествеили какие-либо платные сторонние библиотеки (бесплатные сторонние библиотеки приветствуются)?

1 Ответ

0 голосов
/ 24 июня 2019

Установить Spire.XLS из NuGet : Установить-пакет Spire.XLS -Версия 9.6.7

Spire.XLS предоставляет два способа объединения файлов Excel в один лист Excel:

1. Объединяйте Excel со стилями, используя CellRange.Copy ()

static void Main(string[] args)
{
    string outputPath = "‪output.xls";
    List<string> files = new List<string>();
    files.Add(@"File1.xls");
    files.Add(@"File2.xls");
    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.Version97to2003);
}

Справка: Как объединить несколько листов в один лист со стилями

2. Объедините Excel без стилей, используя DataTable

Workbook workbook1 = new Workbook();
//load the first workbook
workbook1.LoadFromFile(FilePath1);
//load the second workbook
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile(FilePath2);
//load the third workbook
Workbook workbook3 = new Workbook();
workbook3.LoadFromFile(FilePath3);

//import the second and third workbook's first worksheet into the first workbook using datatable
Worksheet sheet1 = workbook1.Worksheets[0];
Worksheet sheet2 = workbook2.Worksheets[0];
Worksheet sheet3 = workbook3.Worksheets[0];

DataTable dataTable1 = sheet2.ExportDataTable();
DataTable dataTable2 = sheet3.ExportDataTable();

sheet1.InsertDataTable(dataTable1, false, sheet1.LastRow + 1, 1);
sheet1.InsertDataTable(dataTable2, false, sheet1.LastRow + 1, 1);

workbook1.SaveToFile(OutputPath + "Merged.xls", ExcelVersion.Version97to2003);

Ссылка: Как объединить 3 листа из разных файлов Excel в один лист с помощью C #

...