我尝试调试此代码,但我没有管理。你们中的任何人都知道为什么我的脚本会创建一个损坏的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异常块。
答案 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);
}