【发布时间】:2016-09-09 09:48:41
【问题描述】:
我正在处理不同类型的 Xlsx 文件。
这些文件有多个列的可能性,例如 2 或 6 甚至 7 列)
我使用 OpenXml 读取了里面的 Xml 数据,我想从每个工作表中生成 Json 文件。
实际上我能够阅读并遍历每个工作表,但是当我尝试使用 Newtonsoft.Json 将其转换为 Json 格式时似乎很奇怪
Excel 文件与此类似
项目 1 ||项目 2 ||第 3 项
V1 || V2 || V3
V1 || V2 || V3
V1 || V2 || V3
但生成的 JSON 文件与此类似
[
[第 1 项 ,第 2 项 ,第 3 项]
[V1 ,V2 ,V3]
[V1 ,V2 ,V3]
[V1 ,V2 ,V3]
]
我想这样格式化它
{
{"项目 1":"V1" ,"项目 2":"V2" ,"项目 3":"V3"}
{"项目 1":"V1" ,"项目 2": "V2" ,"项目 3":"V3"}
{"项目 1":"V1" ,"项目 2":"V2" ,"项目 3":"V3"}
}
这是我的代码:
使用 (SpreadsheetDocument excelDocument = SpreadsheetDocument.Open(file, false)) { var documentBody = excelDocument.WorkbookPart.Workbook;
var sheets = documentBody.Sheets.Cast<Sheet>().ToList();
sheets.ForEach(x => Console.WriteLine(String.Format("RelationshipId:{0}\n SheetName:{1}\n SheetId:{2}", x.Id.Value, x.Name.Value, x.SheetId.Value)));
SharedStringTablePart sstpart = excelDocument.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringTable sst = sstpart.SharedStringTable;
Console.WriteLine("Worksheet count = {0}", documentBody.WorkbookPart.WorksheetParts.Count());
foreach (var worksheetPart in documentBody.WorkbookPart.WorksheetParts)
{
DocumentFormat.OpenXml.Spreadsheet.Worksheet sheet = worksheetPart.Worksheet;
var cells = sheet.Descendants<Cell>();
var rows = sheet.Descendants<Row>();
Console.WriteLine("Row count = {0}", rows.LongCount());
Console.WriteLine("Cell count = {0}", cells.LongCount());
var list = new List<string[]>();
foreach (Row row in rows)
{
Console.WriteLine("Row number: {0}", row.RowIndex);
list.Add(row.Elements<Cell>().Select(x => x.InnerText).ToArray());
foreach (Cell c in row.Elements<Cell>())
{
if (c.CellValue != null)
{
Console.WriteLine("Cell contents: {0}", c.CellValue.Text);
}
}
}
var i = JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented);
}
}
【问题讨论】: