Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ASP.NET(C#)的NPOI_C#_Asp.net_Npoi - Fatal编程技术网

使用ASP.NET(C#)的NPOI

使用ASP.NET(C#)的NPOI,c#,asp.net,npoi,C#,Asp.net,Npoi,我正试图让NPOI使用ASP.NET(C#),我想读取一个excel文件并将其放入数据集中。以下是我尝试的代码: public static DataTable getExcelData(string FileName, string strSheetName) { DataTable dt = new DataTable(); HSSFWorkbook hssfworkbook; using (FileStream file = new FileStream(FileN

我正试图让NPOI使用ASP.NET(C#),我想读取一个excel文件并将其放入数据集中。以下是我尝试的代码:

public static DataTable getExcelData(string FileName, string strSheetName)
{
    DataTable dt = new DataTable();
    HSSFWorkbook hssfworkbook;
    using (FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.Read))
    {
        hssfworkbook = new HSSFWorkbook(file);
    }

    ISheet sheet = hssfworkbook.GetSheet(strSheetName);
    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

    while (rows.MoveNext())
    {
        IRow row = (HSSFRow)rows.Current;

        if (dt.Columns.Count == 0)
        {
            for (int j = 0; j < row.LastCellNum; j++)
            {
                dt.Columns.Add(row.GetCell(j).ToString());
            }

            continue;
        }

        DataRow dr = dt.NewRow();
        for (int i = 0; i < row.LastCellNum; i++)
        {
            ICell cell = row.GetCell(i);

            if (cell == null)
            {
                dr[i] = null;
            }
            else
            {
                dr[i] = cell.ToString();
            }
        }
        dt.Rows.Add(dr);
    }

    return dt;
}
奇怪的是,这实际上适用于我拥有的2个excel文件,但当我放入第三个excel文件时,它会因该错误而崩溃。

尝试使用以下方法:

for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
如果您总是想从第一个工作表中读取数据(可能是为了去掉第二个方法参数,即工作表名称,这也是导致错误的原因),您可以使用:

// rest of the method's code
ISheet sheet = hssfworkbook.GetSheetAt(0);
if (sheet == null)
    return dt;
var rows = sheet.GetRowEnumerator();
// rest of the method's code
尝试使用以下方法:

for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
如果您总是想从第一个工作表中读取数据(可能是为了去掉第二个方法参数,即工作表名称,这也是导致错误的原因),您可以使用:

// rest of the method's code
ISheet sheet = hssfworkbook.GetSheetAt(0);
if (sheet == null)
    return dt;
var rows = sheet.GetRowEnumerator();
// rest of the method's code

如果未找到strSheetName,则返回
null

ISheet sheet = hssfworkbook.GetSheet(strSheetName);
尝试:

for(int-ISHET=0;ISHET

然后找出您想要如何将
strSheetName
strSheetNameActual
进行比较,或者您想要处理哪些工作表以及如何处理

如果未找到strSheetName,则返回
null

ISheet sheet = hssfworkbook.GetSheet(strSheetName);
尝试:

for(int-ISHET=0;ISHET


然后找出您想要如何将
strSheetName
strSheetNameActual
进行比较,或者您想要处理哪些工作表以及如何处理

您不应该同时使用
FirstCellNum
而不是
0
?很可能您遇到了不存在的ICell。请记住,NPOI必须单独创建每个单元格,未创建的单元格将为
null
。另外,异常发生在哪一行?@AlexFilipovici我不确定您的意思。@System.Collections.IEnumerator rows=sheet.GetRowEnumerator()@Bagzli在这种情况下strSheetName与文档中的内容不匹配。。。一定要检查是否有多余的空白。你不应该同时使用
FirstCellNum
而不是
0
?很可能你正在使用不存在的ICell。请记住,NPOI必须单独创建每个单元格,未创建的单元格将为
null
。另外,异常发生在哪一行?@AlexFilipovici我不确定您的意思。@System.Collections.IEnumerator rows=sheet.GetRowEnumerator()@Bagzli在这种情况下strSheetName与文档中的内容不匹配。。。确保检查是否有额外的空白。对于(inti=0;i// rest of the method's code ISheet sheet = hssfworkbook.GetSheetAt(0); if (sheet == null) return dt; var rows = sheet.GetRowEnumerator(); // rest of the method's code
ISheet sheet = hssfworkbook.GetSheet(strSheetName);
for( int iSheet = 0; iSheet < hssfworkbook.NumberOfSheets; ++iSheet )
{
    ISheet sheet = hssfworkbook.GetSheetAt(iSheet); // could cast to HSSFSheet
    String strSheetNameActual = sheet.SheetName;
}