一次对多个excel单元格应用格式
本文关键字:excel 单元格 应用 格式 一次 | 更新日期: 2023-09-27 18:11:47
我想在我的excel文件中格式化所有附加值,我有一个"小"answers"快速"的解决方案,像这样:
Item2
为List<string>
, Item3
为List<List<string>>
if (chkWithValues.Checked && results.Item3.Any())
{
var rows = results.Item3.Count;
var cols = results.Item3.Max(x => x.Count);
object[,] values = new object[rows, cols];
object[,] format = new object[rows, cols];
//All returned items are inserted into the Excel file
//Item2 contains the database types, Item3 the Values
// pgMain shows the progress for the selected tables
for (int j = 0; j < results.Item3.Count(); j++)
{
int tmpNbr = 1;
foreach (string value in results.Item3[j])
{
values[j, tmpNbr - 1] = Converter.Convert(results.Item2[tmpNbr - 1], value).ToString().Replace("'", "");
format[j, tmpNbr - 1] = ExcelColumnTypes.ConvertToExcelTypes(results.Item2[tmpNbr - 1]);
tmpNbr++;
}
pgMain.Maximum = results.Item3.Count();
pgMain.PerformStep();
}
Excel.Range range = xlWorksheet.Range["A3", GetExcelColumnName(cols) + (rows + 2)];
range.Value = values;
range.NumberFormat = format;
}
为了通过单个赋值有效地添加数字格式,我找到了一个2d数组的解决方案,其中包含应该设置的所有数字格式。
问题是,当我有超过(我认为)50.000
单元格要格式化时,我得到以下错误消息"Unable to set the NumberFormat property of the Range class"
。
有人知道一个解决方案,是快速的,可以处理大量的细胞没有错误?
更新:ExcelColumnTypes。ConvertToExcelTypes
public static string ConvertToExcelTypes(string databaseType)
{
if (DatabaseColumnTypes.DOUBLE.Contains(databaseType))
return DOUBLEPO1;
if (DatabaseColumnTypes.DATE.Contains(databaseType))
return DATE2;
if (DatabaseColumnTypes.INTEGER.Contains(databaseType))
return INT;
return TEXT;
}
DatabaseColumnTypes是带有const或直接const的List。示例:
public const string VARBINARY = "varbinary";
public static List<string> STRING = new List<string>()
{
CHAR,
VARCHAR,
TEXT,
NTEXT,
NCHAR,
NVARCHAR,
BINARY,
VARBINARY
};
请更改
range.NumberFormat = format;
range.NumberFormatLocal = format;
那么它应该可以工作