C# 如何在DocumentFormat.OpenXML中转换新表中的每一列
我在将Excel文件转换为XML文件时遇到问题。当我转换表标记中的信息时,它将转换为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
,但我需要转换中的每一列。…
代码如下
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();
}
}
有人能帮我解决这个问题吗?
或者知道如何创建自定义标记吗
提前谢谢