【问题标题】:How to write tab-delimited text into excel sheet programmatically?如何以编程方式将制表符分隔的文本写入 Excel 工作表?
【发布时间】:2019-08-12 09:07:09
【问题描述】:

我有一个 StringBuilder 对象,它存储一个制表符分隔的文本,我想将它导入 Excel 工作表。在我的应用程序中,它可以通过两种方式实现。从对话框中可以选择将文本复制到剪贴板(然后他/她可以打开一个新的 Excel 工作表并简单地粘贴到 Excel 中)或将其直接保存到 Excel 工作簿。第一个选项工作得很好,我想直接实现保存的行为。

我在互联网上找到的唯一方法是将文本的每一行存储到字符串数组中,然后数组的每个索引将是 Excel 工作表中的新行,因此我可以通过迭代数组来写入每一行。

for (int i = 0; i < exportStrings.Count; i++)
{
     Excel.Range currentRange = (Excel.Range)xlWsh.Cells[i + 1, 1];
     currentRange.Value = exportStrings[i];
}

但是它会导致第一个选项出现问题。由于文本现在存储为字符串数组,因此我无法轻松地将其复制到剪贴板。这就是为什么我决定将我的文本存储为字符串生成器。我还尝试将文本写入 Excel 工作表中的第一个单元格,(因为当我在第一个选项中手动将文本粘贴到 Excel 工作表中的第一个单元格时它可以工作)但它无法识别新行字符。

Excel.Range currentRange = (Excel.Range)xlWsh.Cells[1, 1];
currentRange.Value2 = exportStrings.ToString();

知道如何使用 stringbuilder 来完成吗?或者我怎样才能让它识别换行符?

【问题讨论】:

  • 如何将您的文本输入StringBuilder
  • @trailmax stringbuilder.AppendLine(nextRow);

标签: c# excel csv


【解决方案1】:

如果需要字符串数组,您可以随时从字符串生成器中提取字符串,然后将其拆分为行:

StringBuilder sb = new StringBuilder();
//fill sb with whatever data you need
if (option1)
{
    //use stringbuilder, copy to clipboared
}
if (option2)
{
    //convert to string array
    String allText = sb.ToString();
    string[] textLines = allText.Split(Environment.NewLine);
    //write to Excel...
}

诚然,这在效率方面并不完美:您正在创建一个中间字符串,然后再次为字符串数组分配内存。但我将假设您处理的数据量有限,并且与 Excel 的交互无论如何都比一些对象分配花费更多的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多