Excel Dosyalarını Birden Fazla Dosyaya Bölme
Giriş
Bir geliştiricinin tek bir Excel dosyasını birkaç küçük dosyaya ayırması gereken birçok gerçek dünya senaryosu vardır. Örneğin, bir çalışma kitabı her departman için bir çalışma sayfası içerebilir ve her departman yöneticisinin yalnızca kendi sayfasını alması gerekebilir. Diğer durumlarda, bir çalışma sayfasından belirli bir tabloyu veya veri bloğunu çıkarmak ve çalışma kitabının geri kalanını açığa çıkarmadan e-posta yoluyla bağımsız bir dosya olarak göndermek isteyebilirsiniz. Büyük ve birleştirilmiş çalışma kitaplarının da daha kolay işlenmesi, daha hızlı yüklenmesi veya diğer sistemler tarafından sonraki işlemler için daha küçük parçalara bölünmesi gerekebilir.
Aspose.Cells bu görev için iki esnek yaklaşım sunar. İlk yaklaşım, kaynak çalışma kitabındaki her çalışma sayfasını yineleyerek içeriğini yepyeni bir Workbook örneğine kopyalar ve her birini ayrı bir dosya olarak kaydeder. İkinci yaklaşım, bir çalışma sayfası içindeki belirli bir hücre aralığına odaklanır ve yalnızca o aralığı yeni bir çalışma kitabına kopyalar. Her iki durumda da genel akış aynıdır: kaynak çalışma kitabını Workbook sınıfını kullanarak yükleyin, ilgili verilere Worksheet ve Cells nesneleri aracılığıyla erişin, içeriği hedef Workbook‘a aktarın ve ardından hedefi diske kaydedin.
Her Çalışma Sayfasını Yeni Bir Çalışma Kitabına Kopyalayarak Excel Dosyasını Bölme
Yaklaşıma Genel Bakış
Bu yaklaşımda, kaynak çalışma kitabı bir kez açılır ve ardından Worksheets koleksiyonundaki her Worksheet için yeni bir hedef Workbook oluşturulur. Daha sonra kaynak çalışma sayfasının içeriği hedef çalışma kitabının ilk çalışma sayfasına kopyalanır ve hedef çalışma kitabı, adı kaynak çalışma sayfasının adından türetilen bir dosya olarak kaydedilir. Sonuç olarak, her çalışma sayfası için bir çıktı dosyası elde edilir ve her çıktı dosyası tek bir kaynak sayfanın verilerini içerir.
Kaynak çalışma kitabınızdaki her çalışma sayfası mantıksal olarak bağımsız bir bilgi birimini (departman, bölge, ay veya ürün hattı gibi) temsil ettiğinde ve her birimi kendi başına teslim etmek veya işlemek istediğinizde bu yöntem doğru seçimdir.
Adımlar
Aşağıdaki adımlar, her çalışma sayfasını yeni bir çalışma kitabına kopyalayarak bir Excel dosyasının nasıl bölüneceğini açıklar:
- Bir
Workbooknesnesi oluşturup dosya yolunu yapıcısına geçirerek kaynak Excel dosyasını açın. - Kaynak dosyadaki her
Worksheet‘in işlenmesi için birforveyaforeachdöngüsü kullanarakWorkbook.Worksheetskoleksiyonu boyunca yineleyin. - Döngünün içinde, geçerli çalışma sayfası için yeni bir hedef
Workbookörneği (boş bir çalışma kitabı) oluşturun. - Hedef çalışma kitabına yeni bir
Worksheetekleyin (veya varsayılan ilk çalışma sayfasını kullanın) ve anlamlı bir ad atayın; ideal olarak kaynak çalışma sayfasınınNameözelliğiyle aynı olmalıdır. - Kaynak çalışma sayfasının içeriğini hedef çalışma sayfasına kopyalayın. Bu, kaynak çalışma sayfasının
Cellskoleksiyonundaki hücrelerde yineleyerek değerlerini hedef çalışma sayfasının ilgili hücrelerine yazarak veya tüm bir aralığı bir defada aktarmak içinCells.Copyyöntemini kullanarak yapılabilir. - Oluşturulan her dosyanın benzersiz bir ada sahip olması için kaynak çalışma sayfasının adını içeren bir çıktı dosya yolu oluşturun (örneğin,
dataDir + worksheet.Name + ".xls"). - Dosyayı diske yazmak için hedef
Workbook.Saveyöntemini çağırın. - Tüm çalışma sayfaları işlenene kadar bir sonraki çalışma sayfası için 3 ile 7 arasındaki adımları tekrarlayın.
Kod Örneği
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
std::string dataDir = "data/";
Workbook wb(U16String((dataDir + "book1.xls").c_str()));
int sheetCount = wb.GetWorksheets().GetCount();
for (int i = 0; i < sheetCount; ++i) {
Worksheet sourceSheet = wb.GetWorksheets().Get(i);
U16String sheetName = sourceSheet.GetName();
Workbook destWorkbook;
int destIndex = destWorkbook.GetWorksheets().Add();
Worksheet destSheet = destWorkbook.GetWorksheets().Get(destIndex);
destSheet.SetName(sheetName);
destSheet.Copy(sourceSheet);
std::string destFile = dataDir + sheetName.ToUtf8() + ".xls";
destWorkbook.Save(U16String(destFile.c_str()), SaveFormat::Excel97To2003);
}
Aspose::Cells::Cleanup();
return 0;
}
Beklenen çıktı, veri dizininde, kaynak çalışma kitabındaki her çalışma sayfası için bir dosya olmak üzere bir dizi yeni dosyadır. Her dosya, ilgili kaynak sayfanın adını taşır ve dosya o tek sayfanın verilerini (ve isteğe bağlı olarak biçimlendirmesini) içerir.
Bir Aralığı Yeni Bir Çalışma Kitabına Kopyalayarak Excel Dosyasını Bölme
Yaklaşıma Genel Bakış
Bazen bölmeniz gereken veriler tüm bir çalışma sayfasına değil, bir çalışma sayfasının A1:D10 gibi belirli dikdörtgen bir bölgesine ya da belirli bir tabloyu temsil eden adlandırılmış bir aralığa karşılık gelir. Bu gibi durumlarda, tüm çalışma sayfalarını kopyalamak verimsizdir ve daha hassas bir yaklaşım gereklidir: kaynak aralığı belirleyin, yalnızca o aralığı yeni bir çalışma kitabına kopyalayın ve yeni dosyayı kaydedin.
Bu yaklaşım, ilgisiz tüm içerikleri atarken daha büyük bir çalışma sayfasından tek bir tabloyu, rapor bloğunu veya veri alanını çıkarmak istediğinizde idealdir. Ayrıca bir sayfanın kullanıcı tarafından seçilen bölgelerini bağımsız dosyalar olarak dışa aktarmak için de kullanışlıdır.
Adımlar
Aşağıdaki adımlar, belirli bir aralığı yeni bir çalışma kitabına kopyalayarak bir Excel dosyasının nasıl bölüneceğini açıklar:
- Bir
Workbooknesnesi oluşturup dosya yolunu geçirerek kaynak Excel dosyasını açın. - Kopyalamak istediğiniz aralığı içeren hedef
Worksheet‘i, dizine (örneğin, ilk sayfa) veyaWorksheetskoleksiyonundan ada göre alın. - Kopyalanacak aralığı belirleyin. Bu,
A1:C10gibi sabit kodlu bir hücre aralığı,Worksheet.Cellskoleksiyonu aracılığıyla elde edilen adlandırılmış bir aralık veyaWorksheet.Cells.CreateRangeyoluyla oluşturulan bir aralık olabilir. - Yeni bir hedef
Workbookörneği oluşturun. - Hedef çalışma kitabının ilk
Worksheet‘ine (varsayılan sayfa) erişin. - Kaynak aralığı, genellikle
A1hücresinden başlayarak hedef çalışma sayfasına kopyalayın. Tüm bir aralığı kopyalamak için hedefCellskoleksiyonundakiCells.Copyyöntemi kullanılabilir ya da kaynak aralığın hücrelerinde yineleyerek değerleriniPutValueile hedef hücrelere yazabilirsiniz. Ne aktarılacağını kontrol etmek için isteğe bağlıCopyOptionssağlanabilir (yalnızca değerler, değerler ve stiller, formüller vb.). Workbook.Saveyöntemini kullanarak hedef çalışma kitabını diskteki yeni bir dosya yoluna kaydedin.
Kod Örneği
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
// Veri dizinini ve dosya yollarını tanımla
std::string dataDir = "data/";
std::string sourcePath = dataDir + "book1.xls";
std::string outputPath = dataDir + "outputrange.xls";
// Kaynak Excel dosyasını aç
Workbook sourceWorkbook(U16String(sourcePath.c_str()));
// Kaynak çalışma kitabından ilk çalışma sayfasını al
Worksheet sourceWorksheet = sourceWorkbook.GetWorksheets().Get(0);
// Kaynak hücre aralığını A1:C10 olarak tanımla (0. satır, 0. sütundan başlayarak 10 satır, 3 sütun)
Range sourceRange = sourceWorksheet.GetCells().CreateRange(0, 0, 10, 3);
// Yeni bir hedef çalışma kitabı oluştur
Workbook destWorkbook;
// Hedef çalışma kitabındaki ilk çalışma sayfasına eriş
Worksheet destWorksheet = destWorkbook.GetWorksheets().Get(0);
// A1'de kaynak aralıkla aynı boyutlarda bir hedef aralık oluştur
Range destRange = destWorksheet.GetCells().CreateRange(0, 0, 10, 3);
// Kaynak aralığı hedef aralığa kopyala
destRange.Copy(sourceRange);
// Hedef çalışma kitabını yeni bir .xls dosyasına kaydet
destWorkbook.Save(U16String(outputPath.c_str()), SaveFormat::Excel97To2003);
Aspose::Cells::Cleanup();
return 0;
}
Beklenen çıktı, veri dizininde, kaynak çalışma kitabından çıkarılan belirtilen aralığın yalnızca değerlerini (ve isteğe bağlı olarak biçimlendirmesini) içeren tek bir yeni dosyadır. Hedef dosya, kaynak dosyadaki başka hiçbir veriyle ilişkili değildir; yalnızca ilk çalışma sayfasının A1 hücresinden başlayan çıkarılmış aralığı içerir.