2016-07-20 15 views
0

поэтому у меня есть следующий код, где я пытаюсь изменить лист excel. В строке 4th я добавляю дополнительную ячейку с test в качестве строки, но мой файл не обновляется. Я прочитал много статей по библиотеке NPOI и обнаружил, что несколько версий не поддерживают запись файла xlsx. Но я предполагаю, что я использую 2.2.1, и он должен это сделать. Пожалуйста, помогите мне.Библиотека C# NPOI: файл xlsx не обновляется после изменения

enter code here 

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.IO; 
using Excel; 
using NPOI.SS.UserModel; 
using NPOI.XSSF.UserModel; 
namespace PantheonProject 
{ 
    public class test 
    { 
     public static void testMethod() 
     { 
      XSSFWorkbook hssfwb; 
      using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.Open, FileAccess.Read)) 
      { 
       hssfwb = new XSSFWorkbook(file); 
       file.Close(); 
      } 

      ISheet sheet = hssfwb.GetSheetAt(0); 
      IRow row = sheet.GetRow(4); 

      //sheet.CreateRow(row.LastCellNum); 
      ICell cell = row.CreateCell(row.LastCellNum); 
      cell.SetCellValue("test"); 

      for (int i = 0; i < row.LastCellNum; i++) 
      { 
       Console.WriteLine(row.GetCell(i)); 
      } 

      using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.Open, FileAccess.Write)) 
      { 
       hssfwb.Write(file); 
       file.Close(); 
      } 
     } 
    } 
} 

ответ

0

Возможно, вы пытаетесь запустить код from this answer. В вашем коде:

  1. Вы пытаетесь записать файл с кодом FileMode.Open. Измените его на FileMode.OpenOrCreate или FileMode.CreateNew.
  2. Если вы изменяете/редактируете входной файл (в вашем случае source.xlsx), файл будет поврежден, может быть, это ошибка NPOI. Укажите другое имя для вывода файла (например, ->source2.xlsx).

Попробуйте ввести код. Меня устраивает.

public static void testMethod() 
{ 
    XSSFWorkbook hssfwb; 
    using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.Open, FileAccess.Read)) 
    { 
     hssfwb = new XSSFWorkbook(file); 
     file.Close(); 
    } 

    ISheet sheet = hssfwb.GetSheetAt(0); 
    IRow row = sheet.GetRow(4); 

    //sheet.CreateRow(row.LastCellNum); 
    ICell cell = row.CreateCell(row.LastCellNum); 
    cell.SetCellValue("test"); 

    for (int i = 0; i < row.LastCellNum; i++) 
    { 
     Console.WriteLine(row.GetCell(i)); 
    } 

    using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source2.xlsx", FileMode.OpenOrCreate, FileAccess.Write)) 
    { 
     hssfwb.Write(file); 
     file.Close(); 
    } 
} 

Решение 2

Если вы не хотите, чтобы изменить имя файла, удалить входной файл и создать новый файл с таким же именем файла.

public static void testMethod() 
{ 
    XSSFWorkbook hssfwb; 
    using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.Open, FileAccess.Read)) 
    { 
     hssfwb = new XSSFWorkbook(file); 
     file.Close(); 
    } 

    ISheet sheet = hssfwb.GetSheetAt(0); 
    IRow row = sheet.GetRow(4); 

    //sheet.CreateRow(row.LastCellNum); 
    ICell cell = row.CreateCell(row.LastCellNum); 
    cell.SetCellValue("test"); 

    for (int i = 0; i < row.LastCellNum; i++) 
    { 
     Console.WriteLine(row.GetCell(i)); 
    } 

    File.Delete(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx"); 

    using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.OpenOrCreate, FileAccess.Write)) 
    { 
     hssfwb.Write(file); 
     file.Close(); 
    } 
} 

Решение 3: Если вы не хотите, чтобы удалить и заново файл (как раствор 2)

В этом случае, вместо создания файла Excel вручную (смотрите изображение ниже), вам должен создать файл с NPOI.

enter image description here

Если создать первенствовать файл с NPOI, вы можете редактировать/изменять один и тот же файл. На этот раз он не будет поврежден. Чтобы правильно работать с кодом, я предполагаю, что вы уже создали source.xlsx с NPOI.

public static void testMethod() 
    { 
     XSSFWorkbook hssfwb; 
     using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.Open, FileAccess.Read)) 
     { 
      hssfwb = new XSSFWorkbook(file); 
      file.Close(); 
     } 

     ISheet sheet = hssfwb.GetSheetAt(0); 
     IRow row = sheet.GetRow(4); 

     //sheet.CreateRow(row.LastCellNum); 
     ICell cell = row.CreateCell(row.LastCellNum); 
     cell.SetCellValue("test"); 

     for (int i = 0; i < row.LastCellNum; i++) 
     { 
      Console.WriteLine(row.GetCell(i)); 
     } 


     using (FileStream file = new FileStream(@"/Users/harshloomba/Documents/workspace/PantheonProject/source.xlsx", FileMode.OpenOrCreate, FileAccess.Write)) 
     { 
      hssfwb.Write(file); 
      file.Close(); 
     } 
    } 
0

Я изменил то, что было предложено, но ничего не произошло, то я использовал IKVM.net в порт Apache пои в Xamarin студии, и она работала абсолютно нормально. Вы также можете попробовать

Смежные вопросы