#c#
#c#
Вопрос:
Я конвертирую файл Excel в CSV в Azure WebJob, чтобы сохранить файл в хранилище больших двоичных объектов во время процесса с использованием C #, но получаю дополнительную запятую после каждой строки в моем csv-файле.
Пример:
1, Тест, Doe, 2, Тест, Джон,
Вот мой код для создания CSV-файла:
public static class ExcelToCSVConvertor
{
public static List<BlobInput> Convert(List<BlobOutput> inputs)
{
var dataForBlobInput = new List<BlobInput>();
try
{
foreach (BlobOutput item in inputs)
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(item.BlobContent, false))
{
foreach (Sheet _Sheet in document.WorkbookPart.Workbook.Descendants<Sheet>())
{
WorksheetPart _WorksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(_Sheet.Id);
Worksheet _Worksheet = _WorksheetPart.Worksheet;
SharedStringTablePart _SharedStringTablePart = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().First();
SharedStringItem[] _SharedStringItem = _SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ToArray();
StringBuilder stringBuilder = new StringBuilder();
foreach (var row in _Worksheet.Descendants<Row>())
{
foreach (Cell _Cell in row)
{
string Value = string.Empty;
if (_Cell.CellValue != null)
{
if (_Cell.DataType != null amp;amp; _Cell.DataType.Value == CellValues.SharedString)
Value = _SharedStringItem[int.Parse(_Cell.CellValue.Text)].InnerText;
else
Value = _Cell.CellValue.Text;
}
stringBuilder.Append(string.Format("{0},", Value.Trim()));
}
stringBuilder.Append("n");
}
byte[] data = Encoding.UTF8.GetBytes(stringBuilder.ToString().Trim());
string fileNameWithoutExtn = item.BlobName.ToString().Substring(0, item.BlobName.ToString().IndexOf("."));
string newFilename = $"{fileNameWithoutExtn}_{_Sheet.Name}.csv";
dataForBlobInput.Add(new BlobInput { BlobName = newFilename, BlobContent = data });
}
}
}
}
catch (Exception Ex)
{
throw Ex;
}
return dataForBlobInput;
}
}
Комментарии:
1. Рассматривали ли вы возможность использования
for
цикла вместоforeach
цикла по ячейкам строки? Если вы измените …foreach (Cell _Cell in row)
… на …for (int i = 0 , i < row.Cells.Count; i ) {…}
Тогда… в каждой итерации… Запишите значение ячейки, затемif
оператор для запятой …if (i < row.Cells.Count – 1) { //add a comma }
…
Ответ №1:
В этой строке добавляется запятая после КАЖДОГО отдельного значения stringBuilder.Append(string.Format("{0},", Value.Trim()));
1, Test, Doe, 2, Test, John,
Вам нужно исключить запятую в последнем значении в строке (последняя итерация). На последней итерации foreach (ячейка _Cell в строке) StringBuilder .Добавление должно быть stringBuilder.Append(string.Format("{0}", Value.Trim()));