簡體   English   中英

在C#OpenXML中讀取.xlsx

[英]Reading .xlsx in C# OpenXML

我正在嘗試查看是否有可能使用C#通過OpenXML將.xlsx文件讀取到gridview中

我已經通過OleDB連接完成了此操作,但是我想嘗試使用OpenXML。 是gridview的解決方法還是我應該處理它給出的數據?

另外,如果有人對使用OpenXML導入有任何進一步的閱讀材料,那將是非常方便的,因為當前網絡似乎非常稀疏。

編輯:

因此,在下面的鏈接之后,我又回來了:

  using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(xlsxFilePath, true))
            {
                //Access the main Workbook part, which contains data

                WorkbookPart workbookPart = myWorkbook.WorkbookPart;

                WorksheetPart worksheetPart = null;

                if (!string.IsNullOrEmpty(sheetName))
                {
                    Sheet ss = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).SingleOrDefault<Sheet>();

                    worksheetPart = (WorksheetPart)workbookPart.GetPartById(ss.Id);
                }
                else
                {
                    worksheetPart = workbookPart.WorksheetParts.FirstOrDefault();
                }

                SharedStringTablePart stringTablePart = workbookPart.SharedStringTablePart;

                if (worksheetPart != null)
                {
                    Row lastRow = worksheetPart.Worksheet.Descendants<Row>().LastOrDefault();

                    Row firstRow = worksheetPart.Worksheet.Descendants<Row>().FirstOrDefault();

                    if (firstRow != null)
                    {
                        foreach (Cell c in firstRow.ChildElements)
                        {
                            string value = GetValue(c, stringTablePart);

                            dt.Columns.Add(value);
                        }
                    }

                    if (lastRow != null)
                    {
                        for (var i = 2; i <= lastRow.RowIndex; i++)
                        {
                            DataRow dr = dt.NewRow();

                            var empty = true;

                            Row row = worksheetPart.Worksheet.Descendants<Row>().Where(r => i == r.RowIndex).FirstOrDefault();

                            var j = 0;

                            if (row != null)
                            {
                                foreach (Cell c in row.ChildElements)
                                {
                                    //Get cell value

                                    string value = GetValue(c, stringTablePart);

                                    if (!string.IsNullOrEmpty(value) && value != "")
                                    {
                                        empty = false;
                                    }

                                    dr[j] = value;

                                    j++;

                                    if (j == dt.Columns.Count)
                                    {
                                        break;
                                    }
                                }

                                if (empty)
                                {
                                    break;
                                }

                                dt.Rows.Add(dr);
                            }
                        }
                    }
                }
            }

            return dt;
        }

我遇到的問題是我必須指定工作表名稱-這可能超出了可能,但是可以選擇獲取當前工作表名稱,然后讓用戶單擊他們希望程序讀取的工作表-例如彈出式組合框?

要在C#中操作openxml,您可以使用openxml SDK(在此處提供: https ://msdn.microsoft.com/zh-cn/library/office/bb448854.aspx)。

對於您的問題,我認為沒有嵌入式解決方案“ Excel2Gridview”,但操作起來應該不會很困難。 快速瀏覽一下網絡,您會發現相反的問題“ gridview to Excel”。 因此,如果您采用這樣的解決方案https://social.msdn.microsoft.com/Forums/office/zh-CN/20d517d0-fb70-4879-b595-71b6d57be0ae/export-grid-view-to-excel-mysql ?forum = exceldev應用反向方法將您的excel轉換為gridview

更新

要檢索工作表名稱,請查看: https : //msdn.microsoft.com/zh-cn/library/office/bb507946.aspx

要將工作表名稱列出給用戶,您可以創建如下形式:

  • 對話框打開Excel文件
  • 檢索工作表名稱
  • 向用戶建議一個名稱為組合框
  • 如果“確定”,請使用所選的工作表名稱執行功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM