Может ли Open XML Library Поддерживать операцию чтения CSV-файла? - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу прочитать Excel и CSV из открытой библиотеки XML и застрял при чтении полученного файла .csv Файл содержит поврежденные данные

Refer error screenshot

Я буду использовать те же данные, которые я использовал в файле Excel, но только изменения - это расширение файла с .xlxs на .csv

Здесь фрагмент кода

public bool ETLOpeartions(string path)
    {
        WebClient client = new WebClient();
        byte[] buffer = client.DownloadData(path);
        MemoryStream stream = new MemoryStream();
        stream.Write(buffer, 0, buffer.Length);
        stream.Position = 0;
        try
        {
            DataTable dtTable = new DataTable();
            //Lets open the existing excel file and read through its content . Open the excel using openxml sdk
            using (SpreadsheetDocument doc = SpreadsheetDocument.Open(stream, false))
            {
                //create the object for workbook part  
                WorkbookPart workbookPart = doc.WorkbookPart;
                Sheets thesheetcollection = workbookPart.Workbook.GetFirstChild<Sheets>();
//using for each loop to get the sheet from the sheetcollection  
                foreach (Sheet thesheet in thesheetcollection.OfType<Sheet>())
                {
                    //statement to get the worksheet object by using the sheet id  
                    Worksheet theWorksheet = ((WorksheetPart)workbookPart.GetPartById(thesheet.Id)).Worksheet;

                    SheetData thesheetdata = theWorksheet.GetFirstChild<SheetData>();



                    for (int rCnt = 0; rCnt < thesheetdata.ChildElements.Count(); rCnt++)
                    {
                        List<string> rowList = new List<string>();
                        for (int rCnt1 = 0; rCnt1
                            < thesheetdata.ElementAt(rCnt).ChildElements.Count(); rCnt1++)
                        {

                            Cell thecurrentcell = (Cell)thesheetdata.ElementAt(rCnt).ChildElements.ElementAt(rCnt1);
                            //statement to take the integer value  
                            string currentcellvalue = string.Empty;
                            if (thecurrentcell.DataType != null)
                            {
                                if (thecurrentcell.DataType == CellValues.SharedString)
                                {
                                    int id;
                                    if (Int32.TryParse(thecurrentcell.InnerText, out id))
                                    {
                                        SharedStringItem item = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(id);
                                        if (item.Text != null)
                                        {
                                            //first row will provide the column name.
                                            if (rCnt == 0)
                                            {
                                                dtTable.Columns.Add(item.Text.Text);
                                            }
                                            else
                                            {
                                                rowList.Add(item.Text.Text);
                                            }
                                        }
                                        else if (item.InnerText != null)
                                        {
                                            currentcellvalue = item.InnerText;
                                        }
                                        else if (item.InnerXml != null)
                                        {
                                            currentcellvalue = item.InnerXml;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (rCnt != 0)//reserved for column values
                                {
                                    rowList.Add(thecurrentcell.InnerText);
                                }
                            }
                        }
                        if (rCnt != 0)//reserved for column values
                            dtTable.Rows.Add(rowList.ToArray());

                    }

                }
                var x = JsonConvert.SerializeObject(dtTable);
               return true;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }

    }

Код выше работает над чтением содержимого из файла Excel, но с трудностями при чтении файла .csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...