按长度将字符串拆分为 Excel

本文关键字:拆分 Excel 字符串 | 更新日期: 2023-09-27 18:33:40

我目前正在向Excel发送和拆分长行数据。每个拆分都会在新行中打印。我想将其从在现有数据中的管道符号处拆分更改为以 85 个字符长度拆分,但是,在字符 85 处它有可能将一个单词一分为二。如果要拆分一个实际的单词,我将如何告诉它进一步拆分为数据。我知道在 85 岁之后是否也应该找到一个空间。我很好奇要添加什么。

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

按长度将字符串拆分为 Excel

您可以使用此方法(警告未完全测试)

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

这是一个似乎有效的 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