使用 DevExpress SpreadsheetControl 限制单元格内容
Limit cell contents using DevExpress SpreadsheetControl
我正在尝试使用 DevExpress SpreadsheetControl 将列中的单元格截断为固定数量的字符。我通过遍历每个单元格并使用以下代码手动截断它来使其工作:
for (int i = 0; i <= rowCount; ++i)
{
worksheet.Columns[0][i].Value = worksheet.Columns[0][i].Value.ToString().Substring(0, 15);
}
但这非常慢。我想知道控件中是否有一种方法可以告诉它自动截断单元格?
编辑
我找到了可以将 sheet 导出到数据表并在其上执行子字符串的地方。这要快得多:
var dataTable = worksheet.CreateDataTable(worksheet.GetUsedRange(), true);
var exporter = worksheet.CreateDataTableExporter(worksheet.GetUsedRange(), dataTable, true);
exporter.Export();
for (int i = 0; i < dataTable.Rows.Count; ++i)
{
dataTable.Rows[i][0] = dataTable.Rows[i][0].ToString().Substring(0, 15);
}
worksheet.Import(dataTable, true, 0, 0);
我还是想看看 API.
中是否有更好的内置控件或其他地方的方法
您的代码非常慢,因为 SpreadsheetControl
正在尝试根据任何单元格中的任何更改来更新其内容。因此,您只需要在 运行 代码之前锁定更新并在之后解锁。对于 lock/unlock 更新,您可以使用 SpreadsheetControl.BeginUpdate
and SpreadsheetControl.EndUpdate
方法。
这是示例:
spreadsheetControl1.BeginUpdate();
var cells = spreadsheetControl1.ActiveWorksheet.GetUsedRange();
foreach (var cell in cells)
cell.Value = cell.Value.ToString().Substring(0, 15);
spreadsheetControl1.EndUpdate();
我正在尝试使用 DevExpress SpreadsheetControl 将列中的单元格截断为固定数量的字符。我通过遍历每个单元格并使用以下代码手动截断它来使其工作:
for (int i = 0; i <= rowCount; ++i)
{
worksheet.Columns[0][i].Value = worksheet.Columns[0][i].Value.ToString().Substring(0, 15);
}
但这非常慢。我想知道控件中是否有一种方法可以告诉它自动截断单元格?
编辑
我找到了可以将 sheet 导出到数据表并在其上执行子字符串的地方。这要快得多:
var dataTable = worksheet.CreateDataTable(worksheet.GetUsedRange(), true);
var exporter = worksheet.CreateDataTableExporter(worksheet.GetUsedRange(), dataTable, true);
exporter.Export();
for (int i = 0; i < dataTable.Rows.Count; ++i)
{
dataTable.Rows[i][0] = dataTable.Rows[i][0].ToString().Substring(0, 15);
}
worksheet.Import(dataTable, true, 0, 0);
我还是想看看 API.
中是否有更好的内置控件或其他地方的方法您的代码非常慢,因为 SpreadsheetControl
正在尝试根据任何单元格中的任何更改来更新其内容。因此,您只需要在 运行 代码之前锁定更新并在之后解锁。对于 lock/unlock 更新,您可以使用 SpreadsheetControl.BeginUpdate
and SpreadsheetControl.EndUpdate
方法。
这是示例:
spreadsheetControl1.BeginUpdate();
var cells = spreadsheetControl1.ActiveWorksheet.GetUsedRange();
foreach (var cell in cells)
cell.Value = cell.Value.ToString().Substring(0, 15);
spreadsheetControl1.EndUpdate();