我有一个小程序,从数据库表创建Excel文件,Excel 2013它工作正常,但我现在需要Excel 2010,现在我得到以下异常,当我将“格式”添加到NumberFormatLocal(范围.NumberFormatLocal = format;)
当我使用range.NumberFormat = format;
当我使用range.NumberFormat = format;
例外:
Error message: System.Runtime.InteropServices.COMException (0x80020005): Type Conflict. (Exception of HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
At System.RuntimeType.ForwardCallToInvokeMember (String memberName,BindingFlags flags,ObjectTarget,Int32 [] aWrapperTypes,MessageData & msgData)
功能:
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; SetMessage($"{selectedTableItem.TableName} {j} von {results.Item3.Count}",LogHelper.NotificationType.Information); 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)]; SetMessage($"{results.Item3.Count * results.Item1.Count} Zellen werden formatiert....",LogHelper.NotificationType.Information); range.NumberFormatLocal = format; range.Value = values; }
我的Excel类型:
public const string INT = "0"; public const string TEXT = "@"; public const string GENERAL = "General"; public const string STANDARD = "Standard"; public const string Date1 = "m/d/yyyy"; public const string DATE2 = "TT.MM.JJJJ"; public const string DATE3 = "T.M.JJ h:mm;@"; public const string DATETIME = "d/m/yy h:mm;@"; public const string DOUBLECO1 = "#.##0,00"; public const string DOUBLECO2 = "0,00"; public const string DOUBLEPO1 = "#0,##0.00"; public const string DOUBLEPO2 = "0.00"; public const string CUSTOM = "#,##000"; public const string CURRENCYEU1 = "#,##0,00 _€"; public const string CURRENCYEU2 = "#,##0 _€"; public const string CURRENCYEU3 = "#,00 €"; public const string CURRENCYDO1 = "#,##0.00 _$"; public const string CURRENCYDO2 = "#,##0 _$"; public const string CURRENCYDO3 = "#,##0.00 $"; public const string PERCENTAGE1 = "0.00%"; public const string PERCENTAGE2 = "0.0%"; public const string PERCENTAGE3 = "0%";
更新:
我已经尝试使用公共const string TEXT =“@”;作为唯一的格式,但相同的错误来了
更新2:
该错误只发生在表必须有许多条目.当我使用例如具有1000个条目的表没有问题,并且一切正常,如果我使用具有200.000条目的表,则出现错误
更新3:
[
我试图仅使用标准格式进行测试,发生以下错误:
Error message: System.OutOfMemoryException: Insufficient memory available to continue the program.
解决方法
可能是因为您将Excel转换为Excel 2010中整数数据类型的整数太大的整数? 也许行号为例?通过加载32,760行然后32,770作为整数测试它只能在XL 2010中达到32,767.值得一试:o)