Dynamics AX:从客户端上的 excel 导入数据时出错
Dynamics AX : error while importing data from excel on client
我做了一个自定义的 X++ 代码来将数据从 Excel 导入到总帐,但是直接在服务器上导入工作得很好,但是 运行 它是从最终用户(客户端)导入的导入多条记录(比如 24 条记录)然后抛出错误
the number of argument provided is different from the number of argument provided to the method
很明显该错误与连接问题有关,因为我在服务器上尝试了相同的 Excel 文件并成功导入。
为了防止这个问题,我正在考虑替代解决方案,而不是循环遍历 excel 文件并执行业务并插入记录,相反,我认为保存文件可能会有用直接/批量保存在 table 或其他内容中,然后尝试遍历 table 以防止连接问题。
注意:google 上有多种解决方案可用,例如 windows 重影,但 none 对我有效
任何人都可以就此提出建议或建议 suitable 解决方案
我建议您将 Excel 文件保存为 tab-separated 文本,然后使用 TextIO class 进行导入。
您还将受益于 +10 倍的性能提升!
static void ExcelTest(Args _args)
{
#Excel
FilePath excelFile = @'C:\Users\user\Documents\MyExcelFile.xlsx';
FilePath textFile = @'C:\Users\user\Documents\MyTextFile.txt';
Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbooks workBooks = application.get_Workbooks();
Microsoft.Office.Interop.Excel.Workbook workBook;
// Save the excel file as tab-separated text
application.set_DisplayAlerts(false);
application.set_Visible(false);
new FileIOPermission(excelFile, 'r').assert();
workBooks.Open(excelFile, 0, true, 5, '', '', true, #xlWindows, '', false, false, 1, false, false, 1);
CodeAccessPermission::revertAssert();
workBook = workBooks.get_Item(1);
new FileIOPermission(textFile, 'w').assert();
CodeAccessPermission::revertAssert();
workBook.SaveAs(textFile, #xlTextWindows, '', '', false, false, null, #xlLocalSessionChanges, false, null, null, false);
workBooks.Close();
application.Quit();
// Now read the text file
new FileIOPermission(textFile, 'r').assert();
io = new TextIo(textFile, 'r');
if (!io)
throw error("@SYS18447");
io.inFieldDelimiter('\t');
for (con = io.read(); io.status() == IO_Status::Ok; con = io.read())
{
info(con2str(con));
}
}
我做了一个自定义的 X++ 代码来将数据从 Excel 导入到总帐,但是直接在服务器上导入工作得很好,但是 运行 它是从最终用户(客户端)导入的导入多条记录(比如 24 条记录)然后抛出错误
the number of argument provided is different from the number of argument provided to the method
很明显该错误与连接问题有关,因为我在服务器上尝试了相同的 Excel 文件并成功导入。
为了防止这个问题,我正在考虑替代解决方案,而不是循环遍历 excel 文件并执行业务并插入记录,相反,我认为保存文件可能会有用直接/批量保存在 table 或其他内容中,然后尝试遍历 table 以防止连接问题。
注意:google 上有多种解决方案可用,例如 windows 重影,但 none 对我有效
任何人都可以就此提出建议或建议 suitable 解决方案
我建议您将 Excel 文件保存为 tab-separated 文本,然后使用 TextIO class 进行导入。
您还将受益于 +10 倍的性能提升!
static void ExcelTest(Args _args)
{
#Excel
FilePath excelFile = @'C:\Users\user\Documents\MyExcelFile.xlsx';
FilePath textFile = @'C:\Users\user\Documents\MyTextFile.txt';
Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbooks workBooks = application.get_Workbooks();
Microsoft.Office.Interop.Excel.Workbook workBook;
// Save the excel file as tab-separated text
application.set_DisplayAlerts(false);
application.set_Visible(false);
new FileIOPermission(excelFile, 'r').assert();
workBooks.Open(excelFile, 0, true, 5, '', '', true, #xlWindows, '', false, false, 1, false, false, 1);
CodeAccessPermission::revertAssert();
workBook = workBooks.get_Item(1);
new FileIOPermission(textFile, 'w').assert();
CodeAccessPermission::revertAssert();
workBook.SaveAs(textFile, #xlTextWindows, '', '', false, false, null, #xlLocalSessionChanges, false, null, null, false);
workBooks.Close();
application.Quit();
// Now read the text file
new FileIOPermission(textFile, 'r').assert();
io = new TextIo(textFile, 'r');
if (!io)
throw error("@SYS18447");
io.inFieldDelimiter('\t');
for (con = io.read(); io.status() == IO_Status::Ok; con = io.read())
{
info(con2str(con));
}
}