Имам C# конзолно приложение, което се нуждае от голям Excel, за да бъде разделен на множество Excel файлове въз основа на броя на редовете. Кодът по-долу показва изходен файл само с 51 реда (включително редовете на заглавната колона), но крайният изходен файл ще има 100 000+ реда.
Кодът се опитва да пропусне първия (заглавен) ред и след това трябва да копира от редове 2 до 11 и така нататък - целевите файлове са зададени само на 10 реда на файл, за да направя разработката по-бърза.
Въпрос И така, как да копирам редове от 2 до 11 и следващите 10 реда от изходния файл на Excel и да ги поставя в множество целеви файлове на Excel, така че всеки целеви файл да има по 10 реда ?
Ето го почти новонаписания код. Той се базира на копиране на конкретен диапазон от клетки на Excel от един работен лист в друг работен лист и https://social.msdn.microsoft.com/Forums/vstudio/en-US/afd01976-63d0-4f96-9ba4-e3e2b6cf8d55/excel-with-c-how-to-specify-a-range-?forum=vsto
Сега мога да напиша 5 Excel файла. Но първият файл има 9 реда (започвайки от ред 2), докато вторият файл има само 3 реда, започвайки с ред 10, третият има 13 реда, започвайки отново с ред 10; последните два файла имат постепенно повече редове, като и двата започват с ред 10.
Значи нещо не е наред с моя For Loop
? Или начинът, по който избирам ranges
?
string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
string filePath_source = Path.Combine(startPath, @"Source_Files\Offers_Source_Temp.xlsx");
string filePath_copiedinto = Path.Combine(startPath, @"Source_Files\ToBeCopiedInto.xlsx");
app = new Excel.Application();
app.DisplayAlerts = false;
book = app.Workbooks.Open(filePath_source);
sheet = (Excel.Worksheet)book.Worksheets.get_Item((1));
int iRowCount = sheet.UsedRange.Rows.Count;
int maxrows = 10;//change this to something like 50,000 later. 01/16/18
int maxloops = iRowCount / maxrows;
int beginrow = 2; //skipping the header row.
Excel.Application destxlApp;
Excel.Workbook destworkBook;
Excel.Worksheet destworkSheet;
Excel.Range destrange;
string srcPath;
string destPath;
//Opening of first worksheet and copying
srcPath = filePath_source;
for (int i = 1; i <= maxloops; i++) {
Excel.Range rng = (Excel.Range)sheet.Range[sheet.Cells[beginrow, 1], sheet.Cells[maxrows, 3]];
rng.Copy(Type.Missing);
//opening of the second worksheet and pasting
destPath = filePath_copiedinto;
destxlApp = new Excel.Application();
destxlApp.DisplayAlerts = false;
destworkBook = destxlApp.Workbooks.Open(destPath, 0, false);
destworkSheet = destworkBook.Worksheets.get_Item(1);
destrange = destworkSheet.Cells[1, 1];
destrange.Select();
destworkSheet.Paste(Type.Missing, Type.Missing);
destworkBook.SaveAs(startPath + "\\Output_Files\\" + beginrow + ".xlsx");
destworkBook.Close(true, null, null);
destxlApp.Quit();
beginrow = beginrow + maxrows;
string blah = null;
}