C# 如何在DocumentFormat.OpenXML中转换新表中的每一列

C# 如何在DocumentFormat.OpenXML中转换新表中的每一列,c#,xml,excel,C#,Xml,Excel,我在将Excel文件转换为XML文件时遇到问题。当我转换表标记中的信息时,它将转换为,但我需要转换中的每一列。… 代码如下 private DataTable ReadExcelFile(string filename) { // Initialize an instance of DataTable DataTable dt = new DataTable(); try { // Use Spre

我在将Excel文件转换为XML文件时遇到问题。当我转换表标记中的信息时,它将转换为
,但我需要转换
中的每一列。…
代码如下

private DataTable ReadExcelFile(string filename)
    {
        // Initialize an instance of DataTable
        DataTable dt = new DataTable();

        try
        {
            // Use SpreadSheetDocument class of Open XML SDK to open excel file
            using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false))
            {
                // Get Workbook Part of Spread Sheet Document
                WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;

                // Get all sheets in spread sheet document 
                // IEnumerable Interface
                // Exposes an enumerator, which supports a simple iteration over a non-generic collection.
                IEnumerable<Sheet> sheetcollection = spreadsheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();

                // Get relationship Id
                string relationshipId = sheetcollection.First().Id.Value;

                // Get sheet1 Part of Spread Sheet Document
                WorksheetPart worksheetPart = (WorksheetPart)spreadsheetDocument.WorkbookPart.GetPartById(relationshipId);

                // Get Data in Excel file
                SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
                IEnumerable<Row> rowcollection = sheetData.Descendants<Row>();

                if (rowcollection.Count() == 0)
                {
                    return dt;
                }

                // Add columns
                foreach (Cell cell in rowcollection.ElementAt(0))
                {
                    dt.Columns.Add(GetValueOfCell(spreadsheetDocument, cell));
                }

                // Add rows into DataTable
                foreach (Row row in rowcollection)
                {
                    DataRow temprow = dt.NewRow();
                    int columnIndex = 0;
                    foreach (Cell cell in row.Descendants<Cell>())
                    {
                        // Get Cell Column Index
                        int cellColumnIndex = GetColumnIndex(GetColumnName(cell.CellReference));

                        if (columnIndex < cellColumnIndex)
                        {
                            do
                            {
                                temprow[columnIndex] = string.Empty;
                                columnIndex++;
                            }

                            while (columnIndex < cellColumnIndex);
                        }

                        temprow[columnIndex] = GetValueOfCell(spreadsheetDocument, cell);
                        columnIndex++;
                    }

                    // Add the row to DataTable
                    // the rows include header row
                    dt.Rows.Add(temprow);
                }
            }

            // Here remove header row
            dt.Rows.RemoveAt(0);
            return dt;
        }
        catch (IOException ex)
        {
            throw new IOException(ex.Message);
        }
    }

    private static string GetValueOfCell(SpreadsheetDocument spreadsheetdocument, Cell cell)
    {
        // Get value in Cell
        SharedStringTablePart sharedString = spreadsheetdocument.WorkbookPart.SharedStringTablePart;
        if (cell.CellValue == null)
        {
            return string.Empty;
        }

        string cellValue = cell.CellValue.InnerText;

        // The condition that the Cell DataType is SharedString
        if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
        {
            return sharedString.SharedStringTable.ChildElements[int.Parse(cellValue)].InnerText;
        }
        else
        {
            return cellValue;
        }
    }

    private string GetColumnName(string cellReference)
    {
        // Create a regular expression to match the column name of cell
        Regex regex = new Regex("[A-Za-z]+");
        Match match = regex.Match(cellReference);
        return match.Value;
    }

    private int GetColumnIndex(string columnName)
    {
        int columnIndex = 0;
        int factor = 1;

        // From right to left
        for (int position = columnName.Length - 1; position >= 0; position--)   
        {
            // For letters
            if (Char.IsLetter(columnName[position]))
            {
                columnIndex += factor * ((columnName[position] - 'A') + 1) - 1;
                factor *= 26;
            }
        }

        return columnIndex;
    }

    public string GetXML(string filename)
    {
        using (DataSet ds = new DataSet())
        {
            ds.Tables.Add(this.ReadExcelFile(filename));
            return ds.GetXml();
        }
    }
私有数据表ReadExcelFile(字符串文件名)
{
//初始化DataTable的实例
DataTable dt=新的DataTable();
尝试
{
//使用Open XML SDK的电子表格文档类打开excel文件
使用(SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Open(文件名,false))
{
//获取电子表格文档的工作簿部分
WorkbookPart WorkbookPart=电子表格文档.WorkbookPart;
//获取电子表格文档中的所有表格
//IEnumerable接口
//公开枚举数,该枚举数支持对非泛型集合进行简单迭代。
IEnumerable sheetcollection=spreadsheetDocument.WorkbookPart.Workbook.GetFirstChild().Elements();
//获取关系Id
string relationshipId=sheetcollection.First().Id.Value;
//获取表格1电子表格文件的一部分
工作表部件工作表部件=(工作表部件)电子表格文档.WorkbookPart.GetPartById(relationshipId);
//获取Excel文件中的数据
SheetData SheetData=worksheetPart.Worksheet.Elements().First();
IEnumerable rowcollection=sheetData.subjects();
if(rowcollection.Count()==0)
{
返回dt;
}
//添加列
foreach(rowcollection.ElementAt(0)中的单元格)
{
添加(GetValueOfCell(电子表格文档,单元格));
}
//将行添加到数据表中
foreach(行集合中的行)
{
DataRow temprow=dt.NewRow();
int columnIndex=0;
foreach(行中的单元格。子体())
{
//获取单元格列索引
int-cellColumnIndex=GetColumnIndex(GetColumnName(cell.CellReference));
if(columnIndex=0;position--)
{
//写信
if(Char.isleter(columnName[位置])
{
columnIndex+=系数*((columnName[位置]-'A')+1)-1;
系数*=26;
}
}
返回列索引;
}
公共字符串GetXML(字符串文件名)
{
使用(数据集ds=新数据集())
{
Add(this.ReadExcelFile(文件名));
返回ds.GetXml();
}
}
有人能帮我解决这个问题吗? 或者知道如何创建自定义标记吗

提前谢谢