2012-12-27 50 views
0

我一直在努力嘗試,但是我的Excel表格沒有按照我的期望填充。如果內容具有字符串數據類型,那麼表格會顯示'0'來代替那個,不管我嘗試使用轉換如何。我粘貼我的代碼下面,如果有人可以幫助我:使用Open Xml SDK和LINQ在Excel中插入文本

public static void WriteExcelDocument(string FilePath) 
    { 
     try 
     { 
      using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(FilePath, true)) 
      { 
       WorkbookPart workbookPart = spreadSheet.WorkbookPart; 
       IEnumerable<Sheet> Sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>().Where(s => s.Name == "data"); 
       if (Sheets.Count() == 0) 
       { 
        // The specified worksheet does not exist. 
        return; 
       } 
       string relationshipId = Sheets.First().Id.Value; 
       WorksheetPart worksheetPart = (WorksheetPart)spreadSheet.WorkbookPart.GetPartById(relationshipId); 
       SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); 
       int index = 2; 
       SpectrumNewEntities context = new SpectrumNewEntities(); 
       var q = from result in context.Appraisers 
         select result; 
       foreach (var g in q) 
       { 
        string Name = g.AppraiserName!=null?g.AppraiserName:String.Empty; 
        string city = g.City != null ? g.City : String.Empty; 
        string Address = g.Address != null ? g.Address : "NA"; 
        int AppId = g.AppraiserAppraiserCompanyId != null ? (int)g.AppraiserAppraiserCompanyId : 0; 
        string email = g.Email != null ? g.Email : String.Empty; 
        Row contentRow = CreateContentRow(index, Name, city, Address, AppId,email); 
        index++; 
        sheetData.AppendChild(contentRow); 
       } 
       // Save the worksheet. 
       worksheetPart.Worksheet.Save(); 
      } 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

    private static Row CreateContentRow(int index, string Name, string city, string Address, int AppId, string email) 
    { 
     try 
     { 
      //Create new row 
      Row r = new Row(); 
      r.RowIndex = (UInt32)index; 

      //First cell is a text cell, so create it and append it 
      Cell firstCell = CreateTextCell(headerColumns[0], Name, index); 
      r.AppendChild(firstCell);// 

      //create cells that contain data 
      for (int i = 1; i < headerColumns.Length; i++) 
      { 
       Cell c = new Cell(); 
       c.CellReference = headerColumns[i] + index; 
       CellValue v = new CellValue(); 
       if (i == 1) 
       { 
        v.Text = city.ToString(); 
       } 
       if (i == 2) 
       { 
        v.Text = Address.ToString(); 
       } 
       if (i == 3) 
       { 
        v.Text =AppId.ToString(); 
       } 
       if (i == 4) 
       { 
        v.Text = email.ToString(); 
       } 
       c.AppendChild(v); 
       r.AppendChild(c); 

      } 
      return r; 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 
    private static Cell CreateTextCell(string header, string Name,int index) 
    { 
     try 
     { 
      //Create a new inline string cell 
      Cell c = new Cell(); 
      c.DataType = CellValues.InlineString; 
      c.CellReference = header + index; 

      //Add text to text cell 
      InlineString inlineString = new InlineString(); 
      Text t = new Text(); 
      t.Text = Name; 
      inlineString.AppendChild(t); 
      c.AppendChild(inlineString); 
      return c; 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

我不明白爲什麼顯示是這樣的東西? enter image description here

+0

你不能爲'AppId'外的所有單元使用'CreateTextCell'? – SearchAndResQ

+0

哇它的工作,實際上這是我的錯誤,即使是評論線說,第一個單元格是一個文本單元格如此追加它,我忽略了。請添加一個答案,以便我可以接受。 –

回答

0

使用CreateTextCell方法將所有文本單元格添加到該行;就像你在爲Name字段所做的一樣。

相關問題