在c# OpenXML中读取.xlsx

本文关键字:读取 xlsx OpenXML | 更新日期: 2023-09-27 18:08:14

我想看看是否有可能通过OpenXML读取。xlsx文件到一个gridview与c#

我已经通过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中读取.xlsx

要在c#中操作openxml,可以使用openxml SDK(在这里提供:https://msdn.microsoft.com/en-us/library/office/bb448854.aspx)。

  • 关于读取文件的更多介绍:https://msdn.microsoft.com/en-us/library/dd440953(v=office.12).aspx
  • 关于Excel的更多信息:https://msdn.microsoft.com/en-us/library/office/hh180830(v=office.14).aspx

对于你的问题,我不认为有一个嵌入式解决方案"Excel2Gridview",但操作应该不是很困难。在网上快速浏览一下,你会发现相反的问题"gridview to Excel"。因此,如果你采用这样的解决方案https://social.msdn.microsoft.com/Forums/office/en-US/20d517d0-fb70-4879-b595-71b6d57be0ae/export-grid-view-to-excel-mysql?forum=exceldev应用反向方法将excel转换为gridview

检索表名,请看:https://msdn.microsoft.com/en-us/library/office/bb507946.aspx

要向用户列出工作表名称,可以创建如下表单:

    对话框打开excel文件
  • 检索sheetnames
  • 建议用户使用名称
  • 的组合框
  • 如果"ok",使用所选的表名
  • 执行函数