NPOI遍歷excel表格


遍歷指定文件夾內所有的xls,首先獲取所有文件夾內的xls文件路徑,使用VBA腳本生成到一個xls文件中,VBA腳本如下:

Sub filelist()
Dim MyName, Dic, Did, i, t, F, TT, MyFileName
       'On Error Resume Next
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "選擇文件夾", 0, 0)
    If Not objFolder Is Nothing Then lj = objFolder.self.Path & "\"
    Set objFolder = Nothing
    Set objShell = Nothing
  
    t = Time
    Set Dic = CreateObject("Scripting.Dictionary")    '創建一個字典對象
    Set Did = CreateObject("Scripting.Dictionary")
    Dic.Add (lj), ""
    i = 0
    Do While i < Dic.Count
        Ke = Dic.keys   '開始遍歷字典
        MyName = Dir(Ke(i), vbDirectory)    '查找目錄
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then    '如果是次級目錄
                    Dic.Add (Ke(i) & MyName & "\"), ""  '就往字典中添加這個次級目錄名作為一個條目
                End If
            End If
            MyName = Dir    '繼續遍歷尋找
        Loop
        i = i + 1
    Loop
    Did.Add ("文件清單"), ""    '以查找D盤下所有EXCEL文件為例
    For Each Ke In Dic.keys
        MyFileName = Dir(Ke & "*.xls")
        Do While MyFileName <> ""
            Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name = "XLS文件清單" Then
            Sheets("XLS文件清單").Cells.Delete
            F = True
            Exit For
        Else
            F = False
        End If
    Next
    If Not F Then
        Sheets.Add.Name = "XLS文件清單"
    End If
    Sheets("XLS文件清單").[A1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys)
    TT = Time - t
    MsgBox Minute(TT) & "" & Second(TT) & ""
End Sub

 

讀取VBA生成xls文件中存放的路徑列,並傳遞給遍歷方法

        [TestMethod]
        public void GetXlsTest()
        {
            WriteLog("error", "info", "query start");
            IWorkbook workbook = WorkbookFactory.Create("C:\\Users\\Administrator\\Desktop\\file-list.xlsx");
            ISheet sheet = workbook.GetSheetAt(0);
            for (int i = 1; i <= sheet.LastRowNum + 1; i++)
            {
                var row = sheet.GetRow(i);
                if (row != null)
                {
                    ICell cell = row.GetCell(0);
                    if (cell != null)
                    {
                        FindXlsSheetData(cell.ToString());
                    }
                }
            }
            WriteLog("error", "info", "query end");
        }

 遍歷方法接收到路徑,開始遍歷每個xls中的sheet

        private void FindXlsSheetData(string path)
        {
            try
            {
                if (File.Exists(path))
                {
                    IWorkbook workbook = WorkbookFactory.Create(path);
                    for (int s = 0; s < workbook.NumberOfSheets; s++)
                    {
                        ISheet sheet = workbook.GetSheetAt(s);
                        for (int i = 1; i <= sheet.LastRowNum + 1; i++)
                        {
                            var row = sheet.GetRow(i);
                            if (row != null)
                            {
                                StringBuilder line = new StringBuilder();
                                line.Append(path + ",");
                                for (int j = 0; j < row.LastCellNum; j++)
                                {
                                    ICell cell = row.GetCell(j);
                                    if (cell != null)
                                    {
                                        line.AppendFormat("{0}{1}", cell.ToString().Trim(), ",");
                                    }
                                }
                                int sheetIndex = s + 1;
                                WriteLog("gk", "sheet" + sheetIndex + "-", line.ToString().TrimEnd(','));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog("error", "info", path + " query error " + ex.Message);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM