Kul*_*gar 30 c# xml excel openxml
打开OpenXML创建的电子表格时收到错误.错误如下.
Repaired Records: Cell information from /xl/worksheets/sheet.xml part
Repaired Records: Cell information from /xl/worksheets/sheet2.xml part
Repaired Records: Cell information from /xl/worksheets/sheet3.xml part
Run Code Online (Sandbox Code Playgroud)
我唯一能在网上找到有用的东西就是这个问题讨论了一种算法,它会多次改变单个单元格导致问题.话虽如此,我将把我的构造函数链接到SpreadsheetDocument以及更新单元格的三个函数(我曾经做过一次).
我可以根据需要提供任何其他功能,但我相信问题出现在下面列出的两个中.
顺便说说,
GetWorksheetPartByName
InsertCellInWorksheet
GetCell
Run Code Online (Sandbox Code Playgroud)
应该都按预期工作.
实际计划
static void Main(string[] args)
{
//Full path for File
const string newFile = "@C:\test.xlsx";
//Constructor creates default worksheet called "mySheet"
var spreadsheet = new XLSXHelper(newFile);
//updating some cells.
spreadsheet.UpdateCell("mySheet", "D2", "R", 2);
}
Run Code Online (Sandbox Code Playgroud)
构造函数
public XLSXHelper(string filepath)
{
newFile = filepath;
spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook);
this.workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
this.worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "mySheet"
};
sheets.Append(sheet);
workbookPart.Workbook.Save();
spreadsheetDocument.Close();
}
Run Code Online (Sandbox Code Playgroud)
更新单元格
public void UpdateCell(string worksheetName, string textToInsert, string columnName, uint rowIndex)
{
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(newFile, true))
{
WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, worksheetName);
if (worksheetPart != null)
{
InsertCellInWorksheet(columnName, rowIndex, worksheetPart);
Cell cell = GetCell(worksheetPart.Worksheet,columnName, rowIndex);
cell.CellValue = new CellValue(textToInsert);
worksheetPart.Worksheet.Save();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 63
如果要向单元格而不是数字(或可以转换为数字的字符串)添加字符串,则应使用内联字符串或共享字符串而不是CellValue.如果值为数字,则只能使用CellValue.
使用CellValue时生成的XML类似于:
<x:row>
<x:c>
<x:v>12345</x:v>
</x:c>
</x:row>
Run Code Online (Sandbox Code Playgroud)
当您使用内联字符串时,它看起来像:
<x:row>
<x:c t="inlineStr">
<x:is>
<x:t>Foo</x:t>
</x:is>
</x:c>
</x:row>
Run Code Online (Sandbox Code Playgroud)
请注意内联字符串的"is"节点,并且单元格类型属性设置为"inlineStr".
以下是为包含文本的单元格生成正确XML的C#代码:
cell.DataType = CellValues.InlineString;
cell.InlineString = new InlineString() { Text = new Text(textToInsert) };
Run Code Online (Sandbox Code Playgroud)
从我使用共享字符串读取的内容是可取的,但使用内联字符串可以避免错误,并且在Excel中打开文件时看起来很好.
我意识到这是一个旧线程,但我刚刚为编程生成的Excel工作表弹出了相同的错误消息.我的问题是我一直在设置工作表的名称,其名称中包含正斜杠.
希望这可以帮助那些偶然发现这个主题的人,因为它是该主题中最受欢迎的主题.
| 归档时间: |
|
| 查看次数: |
52979 次 |
| 最近记录: |