コードfrom this answerを実行しようとしている可能性があります。あなたのコードで:
FileMode.Open
モードでファイルに書き込もうとしています。それをFileMode.OpenOrCreate
またはFileMode.CreateNew
に変更します。
- 入力ファイル(場合によっては
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();
}
}
あなたは、ファイル名を変更し、入力ファイルを削除して、同じファイル名で新しいファイルを作成したくない場合はソリューション。
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よう)
、代わりに手動でファイルをエクセル作成する(下の画像を参照)、おNPOI
でファイルを作成する必要があります。

あなたはNPOIでファイルをエクセル作成する場合は、同じファイルを変更/編集することができます。今回は壊れません。次のコードを正しく処理するために、私はあなたがNPOI
で既にsource.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/source.xlsx", FileMode.OpenOrCreate, FileAccess.Write))
{
hssfwb.Write(file);
file.Close();
}
}