使用NPOI获取损坏的XLS文件

时间:2016-12-09 16:23:04

标签: c# xls npoi

我尝试调试此代码,但我没有管理。你们中的任何人都知道为什么我的脚本会创建一个损坏的XLS文件吗?

string strCaleSalvareTest = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls";
HSSFWorkbook wbXLS;
strEr = "Er";
try
{
    fsXLSCitire = new FileStream(strCaleSalvareTest, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
    wbXLS = new HSSFWorkbook(fsXLSCitire);

    strEr = string.Empty;
}
catch (Exception ex)
{
    strEr = ex.Message;
}

当我尝试运行它时,它会从wbXLS创建跳转到catch异常块。

1 个答案:

答案 0 :(得分:0)

您收到异常是因为您正在创建一个新的FileStream用于编写(FileAccess.Write)并将其传递给期望能够HSSFWorkbook的构造函数>从流中读取。该文件已损坏,因为FileStream正在创建该文件,但没有任何内容写入该文件。

如果您只是尝试创建一个新的空白工作簿并将其保存到文件中,则可以执行此操作,如下所示。请注意,您需要向新工作簿添加至少一个工作表,否则您仍将生成损坏的文件。

// Create a new workbook with an empty sheet
HSSFWorkbook wbXLS = new HSSFWorkbook();
ISheet sheet = wbXLS.CreateSheet("Sheet1");

// Write the workbook to a file
string fileName = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls";
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
    wbXLS.Write(stream);
}

如果您尝试读取现有工作簿或创建新工作簿(如果不存在),则需要执行以下操作:

string fileName = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls";
HSSFWorkbook wbXLS;

try
{
    // Try to open and read existing workbook
    using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        wbXLS = new HSSFWorkbook(stream);
    }
}
catch (FileNotFoundException)
{
    // Create a new workbook with an empty sheet
    wbXLS = new HSSFWorkbook();
    wbXLS.CreateSheet("Sheet1");
}

ISheet sheet = wbXLS.GetSheetAt(0);  // Get first sheet

// ... 

// Write workbook to file
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
    wbXLS.Write(stream);
}