简体   繁体   中英

Inserting text in Excel using Open Xml SDK and LINQ

I have been trying really hard but my excel sheet is not populating as per my expectations. If the content is having string datatype then sheet is showing '0' in place of that, howsoever hard I tried by using conversions. I am pasting my code below if any one can help me:

  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;
        }
    }

I am not getting why display is something like this? 在此处输入图片说明

Use the CreateTextCell method to add all the text cells to the row; like you are doing for the Name field.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM