Я зацикливаю исходные файлы, открываю файл и единственный рабочий лист, получаю исходный диапазон в качестве диапазона использования рабочего листа, настраиваю последующий целевой диапазон, добавляю его в целевую книгу и сохраняю.
После того, как некоторые файлы не могут точно определить число, когда количество строк стало большим, я получаю исключение
System.ArgumentOutOfRangeException:
в строке
IRange destinationRange = destinationWorksheet.Range[currentDestFirstRow,currentDestFirstCol, currentDestLastRow, currentDestLastCol];
со следующим значением
destination range=[1037502,1,1047586,6]
Если я останавливаю цикл после некоторых файлов, все идет хорошо, и целевой файл генерируется правильно.
Остерегайтесь того, что параметры диапазона имеют тип int, я этого не делаю. найдите любую причину выхода за пределы допустимого диапазона.
Спасибо за любые предложения
public Test()
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("my_key");
destinationFile = outputDataPath + "__merged.xlsx";
// get list of file to merge
filesToMerge = Directory.GetFiles(this.inputDatapath, "*.xlsx");
using (ExcelEngine excelEngine = new ExcelEngine())
{
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Excel2013;
/* set destination workbook and worksheet
* initialize destination Range
*/
IWorkbook destinationWorkbook = application.Workbooks.Create(1);
IWorksheet destinationWorksheet = destinationWorkbook.Worksheets[0];
int currentDestFirstRow = 1;
int currentDestFirstCol = 1;
int currentDestLastRow = 1;
int currentDestLastCol;
string currentFile;
for (int i = 0; i < filesToMerge.Length - 1; i++)
{
/* get used range from worksheet of each input file
* and copy to destination*/
currentFile = filesToMerge;
FileStream currentStream = new FileStream(currentFile, FileMode.Open, FileAccess.Read);
IWorkbook currentWorkbook = application.Workbooks.Open(currentStream, ExcelOpenType.Automatic);
IWorksheet currentWorksheet = currentWorkbook.Worksheets[0];
IRange currentSourceRange = currentWorksheet.UsedRange;
if (i == 0)
{
currentDestFirstRow = 1;
currentDestFirstCol = 1;
currentDestLastRow = currentSourceRange.LastRow;
currentDestLastCol = currentSourceRange.LastColumn;
}
else
{
currentDestFirstRow = currentDestLastRow + 1;
currentDestFirstCol = 1;
currentDestLastRow = currentDestFirstRow + currentSourceRange.LastRow;
currentDestLastCol = currentSourceRange.LastColumn;
}
IRange destinationRange = destinationWorksheet.Range[currentDestFirstRow, currentDestFirstCol, currentDestLastRow, currentDestLastCol];
currentSourceRange.CopyTo(destinationRange);
string line = (i.ToString()).PadLeft(3, '0')+Environment.NewLine;
line += $"file={currentFile}" + Environment.NewLine;
line += $"destination range=[{currentDestFirstRow},{currentDestFirstCol},{currentDestLastRow},{currentDestLastCol}]";
Console.WriteLine(line);
}
FileStream stream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
destinationWorkbook.SaveAs(stream);
destinationWorkbook.Close();
stream.Close();
excelEngine.Dispose();
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... -sharp-usi
Как объединить несколько файлов Excel в один файл с одним листом на C# с помощью Syncfusion.XlsIO ⇐ C#
Место общения программистов C#
1716050180
Anonymous
Я зацикливаю исходные файлы, открываю файл и единственный рабочий лист, получаю исходный диапазон в качестве диапазона использования рабочего листа, настраиваю последующий целевой диапазон, добавляю его в целевую книгу и сохраняю.
После того, как некоторые файлы не могут точно определить число, когда количество строк стало большим, я получаю исключение
System.ArgumentOutOfRangeException:
в строке
IRange destinationRange = destinationWorksheet.Range[currentDestFirstRow,currentDestFirstCol, currentDestLastRow, currentDestLastCol];
со следующим значением
destination range=[1037502,1,1047586,6]
Если я останавливаю цикл после некоторых файлов, все идет хорошо, и целевой файл генерируется правильно.
Остерегайтесь того, что параметры диапазона имеют тип int, я этого не делаю. найдите любую причину выхода за пределы допустимого диапазона.
Спасибо за любые предложения
public Test()
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("my_key");
destinationFile = outputDataPath + "__merged.xlsx";
// get list of file to merge
filesToMerge = Directory.GetFiles(this.inputDatapath, "*.xlsx");
using (ExcelEngine excelEngine = new ExcelEngine())
{
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Excel2013;
/* set destination workbook and worksheet
* initialize destination Range
*/
IWorkbook destinationWorkbook = application.Workbooks.Create(1);
IWorksheet destinationWorksheet = destinationWorkbook.Worksheets[0];
int currentDestFirstRow = 1;
int currentDestFirstCol = 1;
int currentDestLastRow = 1;
int currentDestLastCol;
string currentFile;
for (int i = 0; i < filesToMerge.Length - 1; i++)
{
/* get used range from worksheet of each input file
* and copy to destination*/
currentFile = filesToMerge[i];
FileStream currentStream = new FileStream(currentFile, FileMode.Open, FileAccess.Read);
IWorkbook currentWorkbook = application.Workbooks.Open(currentStream, ExcelOpenType.Automatic);
IWorksheet currentWorksheet = currentWorkbook.Worksheets[0];
IRange currentSourceRange = currentWorksheet.UsedRange;
if (i == 0)
{
currentDestFirstRow = 1;
currentDestFirstCol = 1;
currentDestLastRow = currentSourceRange.LastRow;
currentDestLastCol = currentSourceRange.LastColumn;
}
else
{
currentDestFirstRow = currentDestLastRow + 1;
currentDestFirstCol = 1;
currentDestLastRow = currentDestFirstRow + currentSourceRange.LastRow;
currentDestLastCol = currentSourceRange.LastColumn;
}
IRange destinationRange = destinationWorksheet.Range[currentDestFirstRow, currentDestFirstCol, currentDestLastRow, currentDestLastCol];
currentSourceRange.CopyTo(destinationRange);
string line = (i.ToString()).PadLeft(3, '0')+Environment.NewLine;
line += $"file={currentFile}" + Environment.NewLine;
line += $"destination range=[{currentDestFirstRow},{currentDestFirstCol},{currentDestLastRow},{currentDestLastCol}]";
Console.WriteLine(line);
}
FileStream stream = new FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
destinationWorkbook.SaveAs(stream);
destinationWorkbook.Close();
stream.Close();
excelEngine.Dispose();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78485673/how-to-merge-several-excel-files-into-one-file-with-one-worksheet-in-c-sharp-usi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия