2016-03-21 33 views
3

Şu anda bir .xls çalışma kitabına (HSSFWorkbook) yazıyor olan bir kod parçam var. Ancak, aynı kodu bir .xlsx çalışma kitabına (XSSFWorkbook) yazmak için kullanmaya çalıştığımda, arşiv bozulur ve Excel'de açılamaz.NPOI - Dosyaya yazı yazılıyor .xlsx çalışma kitabı

Aşağıdaki kod, çalışma kitabına erişmek, çalışma kitabını düzenlemek ve daha sonra çalışma kitabına geri dönmek için kullanıyorum. Başlangıçta, çalışma kitabını düzenlemek için kullandığım kodun sorun olduğunu düşünmekteydim, ancak bunu yorumladıktan sonra sorun hala devam ediyor.

IWorkbook workbook; 
using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    if (Path.GetExtension(fileName).Contains("xlsx")) 
    { 
     workbook = new XSSFWorkbook(file); 
    } 
    else 
    { 
     workbook = new HSSFWorkbook(file); 
    } 
} 

//Code that edits workbook which is currently commented out 

using (var file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) 
{ 
    workbook.Write(file); 
} 

Ben boş .xlsx çalışma kitabında karşı bu kodu çalıştırarak denedim ve dosya bozuk olur ve artık açılacak yapabiliyor. Ben Nuget gelen NPOI en son kararlı sürümünü kullanıyorum

: NPOI 2.1.3.1

cevap

4

boşuna NPOI's Codeplex belirtilen her şeyi denedikten sonra ben FileStream özellikleri ile karıştırmasını ve kaydetmek için boş .xslx elde edebildi çalıştı . Geri dosyaya yazmak için aşağıdaki kodu kullanıyorum: Bu XssfWorkbook için bir geri tasarrufu öncelikli sorunu belirlemiştir

using (var file = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) 
{ 
    workbook.Write(file); 
} 

.

+2

İlerideki okuyucular için: boş bir çalışma kitabının kaydedilmesinin (yeni XSSFWorkbook() öğesinin hemen ardından '' .xlsx' dosyasını da bozduğuna dikkat edin.Bu durumdan kaçınmak için çalışma kitabında boş bir sayfa oluşturun (çalışma kitabında çalışma sayfası yaratın) (workbook.CreateSheet() '' çalışma kitabını kaydetmeden önce – Houndolon

+0

iyi bul, ben de WTF idi çünkü 'FileMode.Open'' .xls' dosyaları ile çalışıyor ama '.xlsx' dosyaları değil. –

+0

Ben' FileShare.ReadWrite' olduğunu sanmıyorum iyi bir fikir. –