簡體   English   中英

openxml 2.5,如何將字符串插入單元格?

[英]openxml 2.5, how to insert a string into a cell?

我已經嘗試了幾天將字符串插入到 openxml 電子表格中。 其他一切(到目前為止)都有效,除此之外的一切。

這是我目前正在運行的代碼(注意,這純粹是為了測試目的,而且非常基礎):

using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(file + "test.zip", SpreadsheetDocumentType.Workbook))
{
   spreadSheet.AddWorkbookPart();
   spreadSheet.WorkbookPart.Workbook = new Workbook();

   spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>();
   spreadSheet.WorkbookPart.SharedStringTablePart.SharedStringTable = new SharedStringTable() {Count=1, UniqueCount=1};

   spreadSheet.WorkbookPart.SharedStringTablePart.SharedStringTable.AppendChild(new SharedStringItem(new Text("test")));                
   spreadSheet.WorkbookPart.SharedStringTablePart.SharedStringTable.Save();

   preadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
   spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet();                

   spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.AppendChild(new SheetData());
   spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(new Row());

   Row r2 = new Row() { RowIndex = 5 };
   spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.First().AppendChild(r2);

   r2.AppendChild(new Cell() { CellReference = "A5", CellValue = new CellValue("0"), DataType = new EnumValue<CellValues>(CellValues.SharedString) });

   spreadSheet.WorkbookPart.WorksheetParts.First().Worksheet.Save();

   spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet()
            {
                Id = spreadSheet.WorkbookPart.GetIdOfPart(spreadSheet.WorkbookPart.WorksheetParts.First()),
                SheetId = 1,
                Name = "test"
            });

            spreadSheet.WorkbookPart.Workbook.Save();  
        }

一切似乎都在工作,文件保存在我想要的位置,並且通常看起來像我期望的那樣。 “唯一”的問題是,當我將字符串添加到單元格時,excel 會給我一個錯誤,說文件已損壞並繼續刪除所述單元格。

難道我做錯了什么?

試試這個,用你的方法..

if (spreadSheet.WorkbookPart.GetPartsOfType<SharedStringTablePart>().Count() > 0)
{
    shareStringPart = spreadSheet.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
}
else
{
    shareStringPart = spreadSheet.WorkbookPart.AddNewPart<SharedStringTablePart>();
}
index = InsertSharedStringItem(cell_value, shareStringPart);
cell.CellValue = new CellValue(index.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);

插入共享字符串方法:

private static int InsertSharedStringItem(string text, SharedStringTablePart shareStringPart)
{
    // If the part does not contain a SharedStringTable, create one.
    if (shareStringPart.SharedStringTable == null)
    {
        shareStringPart.SharedStringTable = new SharedStringTable();
    }

    int i = 0;

    // Iterate through all the items in the SharedStringTable. If the text already exists, return its index.
    foreach (SharedStringItem item in shareStringPart.SharedStringTable.Elements<SharedStringItem>())
    {
        if (item.InnerText == text)
        {
            return i;
        }

        i++;
    }

    // The text does not exist in the part. Create the SharedStringItem and return its index.
    shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text(text)));
    shareStringPart.SharedStringTable.Save();

    return i;
}

我認為您應該創建一個電子表格(使用 Excel),將文本添加到單元格中,然后在“OpenXML 2.5 Productivity Tool”中打開這個電子表格。 生產力工具中有一個“反映代碼”按鈕,可以幫助您在代碼中復制需要完成的工作。 這是最簡單的方法,我發現可以解決此類錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM