Создать файл с разделителями табуляции из Datatable, имеющий двойную кавычку

1

Я использую spreadsheetgear для создания файла с разделителями табуляции, он работает нормально, но проблема в том, что любой столбец в datatable имеет значение с запятой (символ "), а затем spreadsheetgear автоматически окружает текст двойными кавычками.

Есть ли способ не вводить двойные кавычки, если текст имеет знак запятой?

Вот код, который я использую для создания файла с разделителями табуляции:

Dim workbook As SpreadsheetGear.IWorkbook
Dim worksheet As SpreadsheetGear.IWorksheet
workbook = SpreadsheetGear.Factory.GetWorkbook()
worksheet = workbook.Worksheets("Sheet1")
Dim cells As SpreadsheetGear.IRange
cells = worksheet.Cells
cells.CopyFromDataTable(dt, Data.SetDataFlags.None)
workbook.SaveAs(strFilePath, SpreadsheetGear.FileFormat.UnicodeText)
worksheet = Nothing
workbook.Close()
workbook = Nothing
Теги:
spreadsheetgear

2 ответа

0

Для изменения этого поведения в SpreadsheetGear нет доступных параметров. Электронная таблицаGear обычно моделирует свое поведение после Excel, и вы заметите, что Excel делает то же самое, когда встречает запятые при сохранении в Unicode Text.

Вам просто нужно создать собственную процедуру "SaveToUnicodeText", которая строит файл на основе ваших конкретных требований к вашему приложению. Ниже приведен пример кода, который может помочь вам начать работу с такой программой. Обратите внимание, что этот код не обрабатывает все возможные "странные" сценарии, с которыми вы можете столкнуться с данными входящих ячеек. Например, я не проверял, нужно ли обрабатывать случаи, связанные с использованием перевода строк. Этот код является просто отправной точкой, поэтому вы захотите рассмотреть возможность добавления к нему по мере необходимости:

' Create workbook
Dim workbook As SpreadsheetGear.IWorkbook
Dim worksheet As SpreadsheetGear.IWorksheet
workbook = SpreadsheetGear.Factory.GetWorkbook()
worksheet = workbook.Worksheets("Sheet1")
Dim cells As SpreadsheetGear.IRange
cells = worksheet.Cells

' Copy in your data
cells.CopyFromDataTable(dt, Data.SetDataFlags.None)

' Create a couple StringBuilders to help us out.
Dim sb = New StringBuilder()
Dim sbRow = New StringBuilder()

' IWorkbook.SaveAs(...) effectively saves the UsedRange for the worksheet
' for tab-delimited files, so we'll use the same range.
Dim rangeToSave = worksheet.UsedRange

' Iterate through each row of the used range.
For row = 0 To rangeToSave.RowCount
    sbRow.Length = 0
    ' Now iterate through each cell in the row.
    For col = 0 To rangeToSave.ColumnCount
        ' Build up a tab-delimited string consisting of the formatted text
        ' for each cell in this row.
        sbRow.Append(rangeToSave(row, col).Text).Append(vbTab)
    Next
    ' Trim off any dangling tab characters due to empty cells at the end
    ' of the row and append as a new line to the main StringBuilder.
    sb.AppendLine(sbRow.ToString().TrimEnd(vbTab))
Next

' Save file to disk.
Using stream = New StreamWriter(strFilePath)
    stream.Write(sb.ToString())
End Using
0

Вы можете перебирать текст каждой ячейки в cells и вынимать кавычки. Цитаты могут быть помещены внутри (или найдены) строками, используя двойную двойную кавычку (""), которая может выглядеть странно, но выполняет свою работу. Например, вы можете использовать cellText.Replace("" "", "") для удаления кавычек.

  • 0
    Я реализовал, но у меня есть 2 миллиона записей и занимают много времени. Я пытаюсь сделать, есть ли что-нибудь, что может быть сделано с Dll Spreadsheetgear

Ещё вопросы

Сообщество Overcoder
Наверх
Меню