2016-02-06 4 views
2

В настоящее время я отправляю и разделяю длинные строки данных в Excel. Каждый разделитель печатает в новой строке. Я хочу изменить это от разделения на символ трубы в существующих данных до разделения на длину символа 85, но есть вероятность, что у персонажа 85 он может разбить слово на две части. Как бы я сказал, чтобы он разделился дальше на данные, если собирается разбить фактическое слово. Я знаю, если в 85 он также должен найти пробел после. Мне интересно, что добавить.Разделить строку по длине Excel

// Add Description 
     string DescriptionSplit = srcAddOnPanel.Controls["txtProductDescAddOn" + AddRow].Text; 
     string[] descriptionParts = DescriptionSplit.Split('|'); 
     int i; 
     for (i = 0; i <= descriptionParts.GetUpperBound(0); i++) 
     { 
      worksheet.Rows[currentRow].Insert(); //applies the description for the default bundle row 
      worksheet.Rows[currentRow].Font.Bold = false; 
      worksheet.Cells[currentRow, "E"].Value = rowIndent + descriptionParts[i].Trim(); 
      currentRow++; 
     } 
+0

Метод [Strings.InStr] (https://msdn.microsoft.com/en-us/library/47d6yh63%28v=vs.110%29.aspx) найдет положение первого символа пробела. Поделитесь этим с помощью метода [Strings.Mid] (https://msdn.microsoft.com/en-us/library/8kyd8789 (v = vs.110) .aspx), чтобы вы начали смотреть на 85-ю позицию и добавляли 85 к результат. Не забудьте конкатенировать символ пробела до конца строки, чтобы всегда можно было что-то найти. – Jeeped

+0

, если бы вы могли показать пример этих функций, которые были бы удивительными, – CamlCase

+0

Рассмотрите возможность использования пробела в качестве разделительного символа и построения каждой строки следующей группой слов, пока следующее слово не создаст строку длиной более 85 символов. –

ответ

0

Вы могли бы использовать этот подход (Предупреждение не полностью протестирована)

int x = 85; 
int y = 0; 
int currentRow = 0; 

// Loop until you have at least 85 char to grab 
while (x + y < DescriptionSplit.Length) 
{ 
    // Find the first white space after the 85th char 
    while (x + y < DescriptionSplit.Length && 
      !char.IsWhiteSpace(DescriptionSplit[x+y])) 
     x++; 
    // Grab the substring and pass it to Excel for the currentRow 
    InsertRowToExcel(DescriptionSplit.Substring(y, x), currentRow); 

    // Prepare variables for the next loop 
    currentRow++; 
    y = y + x + 1; 
    x = 85; 
} 
// Do not forget the last block 
if(y < DescriptionSplit.Length) 
    InsertRowToExcel(DescriptionSplit.Substring(y), currentRow); 
... 

void InsertRowToExcel(string toInsert, int currentRow) 
{ 
     worksheet.Rows[currentRow].Insert();  
     worksheet.Rows[currentRow].Font.Bold = false; 
     worksheet.Cells[currentRow, "E"].Value = rowIndent + toInsert.Trim(); 
} 
0

Вот версия VBA, которая, кажется, работает. Как было предложено в моем комментарии, он разделяет строку пробелами, а затем проверяет, добавляет ли слово слово длина текущей строки больше (85). Как обычно, с такими вещами, которые правильно заполняют последнее слово, сложно.

Если это работает для вас, оно должно быть достаточно простым, чтобы изменить на C#. Дайте мне знать, если это не так:

Sub ParseRows() 
Const ROW_LENGTH As Long = 85 
Dim Text As String 
Dim Words As Variant 
Dim RowContent As String 
Dim RowNum As Long 
Dim i As Long 

Text = ActiveCell.Text 
Words = Split(Text, " ") 
RowNum = 2 

For i = LBound(Words) To UBound(Words) 
    If Len(RowContent & Words(i) & " ") > ROW_LENGTH Then 
     ActiveSheet.Range("A" & RowNum).Value = RowContent 
     RowNum = RowNum + 1 
     If i = UBound(Words) Then 
      RowContent = Words(i) 
     Else 
      RowContent = "" 
     End If 
    Else 
     RowContent = RowContent & Words(i) & " " 
    End If 
Next i 
If RowContent <> "" Then ActiveSheet.Range("A" & RowNum).Value = RowContent 
End Sub 
Смежные вопросы