作为免责声明,我对 C# 比较陌生(6 个月),因为我开始在需要它的新工作中使用它,而且我是办公室中唯一的开发人员。
因此,我一直致力于使用带有 DocumentFormat.OpenXML.Wordprocessing 的表格来自动执行可变大小的文档,并且我在放入每个段落所在的表格单元格的起始字符串处遇到了缩进问题。 我将字符串添加到 DataTable 的不同行,然后将其转换为插入到文档中的表的 TableCell 内的段落中的单独运行。
我将以变量“间距”开始字符串
var spacing = " ".PadLeft(10);
然后我将在两种不同的场景中使用它:
DataTable.Rows.Add(spacing +"start of paragraph");
DataTable.Rows.Add("start" + spacing + "of paragraph");
两个输出是:
段落开始
段落开始_________
(下划线为空格) 而我想要的输出是
__________段落开头
段落开始_________
显然,在其他字符串之间时,“间距”可以正确读取,但在字符串的开头根本没有被读取
有谁知道如何解决这个问题吗?当我将 Datatable 转换为 Table() 时,我尝试在段落级别缩进,但无济于事,我真的非常渴望如何强制 c# 执行此操作。
确保在显示
.Trim()
行的值时没有调用 DataTable
方法。 Trim()
删除 string
开头和结尾的空格,但如果空格仅出现在中间,则不会删除。
例如,如果我在 清单 1 中编写代码,我将得到上面您所说的不需要的文本,作为输出:
using System;
using System.Data;
namespace MyConsoleApp
{
public static class Program
{
public static void Main()
{
var dt = new DataTable();
dt.Columns.Add(new DataColumn());
var spacing = " ".PadLeft(10);
dt.Rows.Add(spacing + "start of paragraph");
dt.Rows.Add("start" + spacing + "of paragraph");
for(int i = 0; i < dt.Rows.Count; i++)
{
Console.WriteLine(DataRowToString(dt.Rows[i]).Trim());
}
}
private static string DataRowToString(DataRow row)
{
var result = string.Empty;
try
{
if (row == null) return result;
result = row.ToString();
}
catch (Exception ex)
{
Console.WriteLine($"ERROR: {ex.Message}");
result = string.Empty;
}
return result;
}
}
}
清单 1. 'MyConsoleApp' 的代码,
.Trim()
是每个输出行,然后将其写入屏幕。
否则,如果我停止
.Trim()
调用,那么我会得到您想要的输出。例如,我的示例的正确版本如下所示:
using System;
using System.Data;
namespace MyConsoleApp
{
public static class Program
{
public static void Main()
{
var dt = new DataTable();
dt.Columns.Add(new DataColumn());
var spacing = " ".PadLeft(10);
dt.Rows.Add(spacing + "start of paragraph");
dt.Rows.Add("start" + spacing + "of paragraph");
for(int i = 0; i < dt.Rows.Count; i++)
{
Console.WriteLine(DataRowToString(dt.Rows[i]));
}
}
private static string DataRowToString(DataRow row)
{
var result = string.Empty;
try
{
if (row == null) return result;
result = row.ToString();
}
catch (Exception ex)
{
Console.WriteLine($"ERROR: {ex.Message}");
result = string.Empty;
}
return result;
}
}
}
清单 2. 未调用
String.Trim()
的代码。
执行清单 2中的代码,您应该获得所需的输出。
故事的寓意
检查您的显示代码是否有
.Trim()
来电。