aardio调用c#编写的CarlosAg.ExcelXmlWriter.dll处理excel文件

By 笑口常 at 2021-07-17 • 0人收藏 • 521人看过

主要是为了学习aardio调用c#的dll的方法.

该示例用到的组件官方:http://www.carlosag.net/Tools/ExcelXmlWriter/

我这里只是简单的调用实验, 具体的使用还是参考官方示例.

image.png

//调用C#程序集 
import dotNet; 
var appDomain = dotNet.clr().createAppDomain();
//加载应用程序目录下的程序集
var Demodll = appDomain.loadFile("\res\CarlosAg.ExcelXmlWriter.dll");
//声明接口
var book = Demodll.new("CarlosAg.ExcelXmlWriter.Workbook")

var sheet = book.Worksheets.Add("Sample");
var row =  sheet.Table.Rows.Add();
row.Cells.Add("Hello aardio World");
book.Save("demo/test.xls");

excelxml.zip


8 个回复 | 最后更新于 2021-07-20
2021-07-18   #1

增加一行, 增加30行数据, 添加个连接, 调用excel函数;

//调用C#程序集 
import dotNet; 
var appDomain = dotNet.clr().createAppDomain();
//加载应用程序目录下的程序集
var Demodll = appDomain.loadFile("\res\CarlosAg.ExcelXmlWriter.dll");
//声明接口
var book = Demodll.new("CarlosAg.ExcelXmlWriter.Workbook")
var sheet = book.Worksheets.Add("Sample");
var row =  sheet.Table.Rows.Add();
row.Index = 3;
row.Cells.Add("Data");
row.Cells.Add("Data 1");
row.Cells.Add("Data 2");
row.Cells.Add("Data 3");

// Generate 30 rows
for (i=0; 30; 1) {
    row = sheet.Table.Rows.Add();
    row.Cells.Add("Row " + i);
    row.Cells.Add( tostring(math.random(0,1000)) );
}
// Add a Hyperlink
row = sheet.Table.Rows.Add();
cell = row.Cells.Add();
cell.Data.Text = "aardio官方网址,点击访问";
cell.HRef = "http://www.aarido.com";
// Add a Formula for the above 30 rows
cell = row.Cells.Add();
cell.Formula = "=SUM(R[-30]C:R[-1]C)";
book.Save("demo/test.xls");
import process
process("demo/test.xls")

image.png

上面的SUM()结果是0 ,因为上面的数字其实格式是字符, 字符相加就是0, 必须指定上面的数字格式是数字才行, 那么

根据文档, 需要指定下

image.png

这里可以看到, 需要new一个新类. 转换为aardio为

for (i=0; 30; 1) {
    row = sheet.Table.Rows.Add();
    row.Cells.Add("Row " + i);
    row.Cells.Add( Demodll.new("CarlosAg.ExcelXmlWriter.WorksheetCell",tostring(math.random(0,1000)),2) );
}

这样貌似不行.

image.png

去掉new中的,第二个参数,2 ,然后就不报错了,但是, 还是字符格式

row.Cells.Add( Demodll.new("CarlosAg.ExcelXmlWriter.WorksheetCell",tostring(math.random(0,1000))) );

不知道, 如果有两个或者多个参数应该怎么设置?


已解决, 请看4楼

2021-07-24   #2

回复#1 @笑口常 :

并不是不支持多个参数,而是因为C#的枚举值无法表达自身类型,2作为数值传过去以后,C#里数值和枚举值无法自动转换,导致调用失败。

aardio 新版已经针对这个问题做了改进,你的代码可以正常运行了。
不过 aardio 可能无法支持全部的 C# 语法特性,遇到这类问题,可以直接用 C# 写一个中间DLL(在 aardio 里可以内存加载该DLL ),简化调用接口。

2021-07-24   #3

获取枚举值:
var dataType = Demodll.getEnum("CarlosAg.ExcelXmlWriter.DataType.Number")

新版支持简写:
Demodll.getEnum("DataType.Number")

2021-07-24   #4

谢谢 jacenHe 老大 ,  现在新版本直接运行上面的代码没问题了.

//调用C#程序集 
import dotNet; 
var appDomain = dotNet.clr().createAppDomain();
//加载应用程序目录下的程序集
var Demodll = appDomain.loadFile("\res\CarlosAg.ExcelXmlWriter.dll");
//声明接口
var book = Demodll.new("CarlosAg.ExcelXmlWriter.Workbook")
var sheet = book.Worksheets.Add("Sample");
var row =  sheet.Table.Rows.Add();

row.Index = 3;
row.Cells.Add("Data");
row.Cells.Add("Data 1");
row.Cells.Add("Data 2");
row.Cells.Add("Data 3");

// Generate 30 rows
for (i=0; 30; 1) {
    row = sheet.Table.Rows.Add(); 
    row.Cells.Add("Row " + i);
    row.Cells.Add( Demodll.new("CarlosAg.ExcelXmlWriter.WorksheetCell",tostring(math.random(0,1000)),2) );
}
// Add a Hyperlink
row = sheet.Table.Rows.Add();
cell = row.Cells.Add();
cell.Data.Text = "aardio官方网址,点击访问";
cell.HRef = "http://www.aarido.com";
// Add a Formula for the above 30 rows
cell = row.Cells.Add();
cell.Formula = "=SUM(R[-30]C:R[-1]C)";

book.Save("demo/test.xls");
import process
process("demo/test.xls")

image.png


2021-07-24   #5

设置单元格样式:

//设置单元格样式
var style = book.Styles.Add("HeaderStyle");
style.Font.FontName = "Tahoma";
style.Font.Size = 34;
style.Font.Bold = true;
style.Font.Color = "Red";
style.Interior.Color = "Blue";
style.Interior.Pattern = Demodll.getEnum("StyleInteriorPattern.DiagCross");

//单元格样式, 第一种方式
row.Cells.Add( Demodll.new("CarlosAg.ExcelXmlWriter.WorksheetCell","Header 1", "HeaderStyle") );
//单元格样式, 第二种方式
var cell = row.Cells.Add("Header 3");
cell.StyleID = "HeaderStyle";

image.png

2021-07-26   #6

能否用写两个调用NPOI的例子谢谢

2021-07-27   #7

回复#6 @txhelp :

https://www.htmlayout.cn/t/462  刚写的NPOI操作例子.

2021-07-27   #8

回复#7 @admin :

给力

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
加入本站专享群:783804676
AARDIO语言QQ大群:70517368
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
C大Aardio论坛:Aar爱好者论坛
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
赞助商:才仁机械
下载站:
非凡软件站



Loading...