findLastColumn
int findLastColumn(SysExcelWorksheet _sysExcelWorksheet, boolean _data = true)
{
#Excel
#define.Star('*')
SysExcelRange sysExcelRange;
int ret;
;
sysExcelRange = _data ?
_sysExcelWorksheet.cells().range(#ExcelDataRange) :
_sysExcelWorksheet.cells().range(#ExcelTotalRange);
try
{
sysExcelRange = sysExcelRange.find(#Star, null, #xlFormulas, #xlWhole, #xlByColumns, #xlPrevious);
}
catch (Exception::Error)
{
error("@SYS59926");
}
if (sysExcelRange)
ret = sysExcelRange.column(); return ret;
}
findLastRow
int findLastRow(SysExcelWorksheet _sysExcelWorksheet)
{
#Excel
#define.Star('*')
#define.ExcelDataRange("A1:IV65536")
SysExcelRange sysExcelRange = _sysExcelWorksheet.cells().range(#ExcelDataRange);
int ret;
;
try
{
sysExcelRange = sysExcelRange.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious);
}
catch (Exception::Error)
{
error("@SYS59926");
}
if (sysExcelRange)
ret = sysExcelRange.row(); return ret;
}

come on, look at an example

void THK_7519_readExcelFile()
{
#AviFiles
#WinAPI
SysExcelApplication application = SysExcelApplication::construct();
SysExcelWorkbooks workbooks = application.workbooks();
SysExcelWorkbook workbook;
SysExcelWorksheets worksheets;
SysExcelWorksheet worksheet;
SysExcelCells cells; COMVariantType type;
SysOperationProgress progressBar;
Test newTest; FileNameFilter filter = ['All files','*.xls;*.xlsx'];
str code, address, precent;
Filename fileName;
int records,row = 1;
;
filename = Winapi::getOpenFileName(0, filter, WinAPI::getFolderPath(#CSIDL_Personal), "Select file for upload", '','');
if (!winAPI::fileExists(filename,false))
return;
if (!Box::yesNo(strfmt("Upload this file %1", filename), dialogButton::No))
return; try
{
workbooks.open(fileName);
workbook = workbooks.item(1);
worksheets = workbook.worksheets();
worksheet = worksheets.itemFromNum(1);
cells = worksheet.cells();
records = this.findLastRow(worksheet);// 2190;
progressBar = SysOperationProgress::newGeneral(#AviUpdate, "import data", records);
progressBar.setTextLength(80);
setPrefix(filename); ttsBegin;
delete_from newTest;
do
{
row++;
setPrefix(strFmt("Row %1", row));
Code = strLRTrim(cells.item(row, 1).value().bStr());
address = strLRTrim(cells.item(row, 2).value().bStr()); newTest.clear();
newTest.initValue();
newTest.AccountNum = Code;
newTest.Name01 = address;
newTest.LineNum = row;
if (!newTest.validateWrite())
throw Exception::Error;
newTest.insert();
progressBar.incCount(1);
progressBar.setText(strfmt("Line: %1 - %2[%3 %4]", newTest.LineNum, newTest.AccountNum, newTest.Name01, newTest.Name02));
progressBar.setCaption(strFmt("Process %1%", row / records * 100));
progressBar.update(true);
type = cells.item(row + 1, 1).value().variantType();
}
while (type != COMVariantType::VT_EMPTY); ttsCommit;
}
catch (Exception::Error)
{
application.quit();
} application.quit();
progressBar.finalize();
progressBar = null;
Test_ds.executeQuery();
info( strfmt("total read %1 records", int2str(row)) );
}

How to get last SysExcelWorksheet object row or column[X++]的更多相关文章

  1. Flutter 布局(七)- Row、Column详解

    本文主要介绍Flutter布局中的Row.Column控件,详细介绍了其布局行为以及使用场景,并对源码进行了分析. 1. Row A widget that displays its children ...

  2. Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.

      1: /// <summary> 2: /// Write an algorithm such that if an element in an MxN matrix is 0, it ...

  3. excel小技巧-用于测试用例的编号栏:“获取当前单元格的上一格的值+1”=INDIRECT(ADDRESS(ROW()-1,COLUMN()))+1

    编写用例的时候使用,经常修改用例的时候会需要增加.删除.修改条目,如果用下拉更新数值的方式会很麻烦. 1.使用ctrl下拉,增删移动用例的时候,需要每次都去拉,万一列表比较长,会很麻烦 2.使用ROW ...

  4. params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render

    params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render

  5. LeetCode 947. Most Stones Removed with Same Row or Column

    原题链接在这里:https://leetcode.com/problems/most-stones-removed-with-same-row-or-column/ 题目: On a 2D plane ...

  6. Flutter 布局类组件:线性布局(Row和Column)

    前言 所谓线性布局,即指沿水平或垂直方向排布子组件.Flutter中通过Row和Column来实现线性布局,并且它们都继承自弹性布局(Flex). 接口描述 Row({ Key key, // 表示子 ...

  7. 12.Quick QML-QML 布局(Row、Column、Grid、Flow和嵌套布局) 、Repeater对象

    1.Row布局 Row中的item可以不需要使用anchors布局,就能通过行的形式进行布局. 并且item可以使用Positioner附加属性来访问有关其在Row中的位置及其他信息. 示例如下所示, ...

  8. 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column

    背景 最近收到了一个关于以前项目的维护请求,那时的楼主还是刚刚工作的小青年~~~ 项目之前使用的是.net/winform.今天重新打开代码,看着之前在FrameWork2.0下面的代码, 满满的回忆 ...

  9. 【leetcode】947. Most Stones Removed with Same Row or Column

    题目如下: On a 2D plane, we place stones at some integer coordinate points.  Each coordinate point may h ...

随机推荐

  1. 路由总结之静态、RIP、OSPF、IS-IS、BGP和策略路由

    路由无疑是当今网络的核心,看到浩如烟海的网络资料,可以让人皓首穷经啊,而且都是浩浩荡荡几百页,所以想搞简单点. 静态路由 静态路由无疑是最简单,也是最基本的. Ip route-static(指定是静 ...

  2. error C2491: 不允许 dllimport 函数 的定义

    转载:https://blog.csdn.net/gaofeidongdong/article/details/7781345 在工程属性中 预编译宏中加上 DLL_EXPORT为了减少使用dll时候 ...

  3. matlab中fft快速傅里叶变换

    视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...

  4. C++字符串的输入输出整理

    最近在跟一门北大C++程序设计的慕课,openjudge上做到一道题,要求定义一种能够输入输出学生姓名,年龄,学号和学年成绩的类.比较特别的是输入的形式是以逗号隔开的一长串字符串. 我用的方法通过是通 ...

  5. 【题解】Ehab the Xorcist

    \(\color{red}{Link}\) \(\color{blue}{\text{Solution:}}\) 题目要求构造一个最短的序列,使得异或和为\(u\),数列和为\(v\). 那么,因为是 ...

  6. 上海hande

    HZero UI 一个服务于企业级产品的设计体系,基于『确定』和『自然』的设计价值观和模块化的解决方案,让设计者专注于更好的用户体验. Choerodon UI of React Choerodon ...

  7. java安全编码指南之:锁的双重检测

    目录 简介 单例模式的延迟加载 double check模式 静态域的实现 ThreadLocal版本 简介 双重检测锁定模式是一种设计模式,我们通过首次检测锁定条件而不是实际获得锁从而减少获取锁的开 ...

  8. 强大的table组件-antd pro table

    概述 antd pro table antd pro table 的主要部分 表格显示的配置(绿色框内) 检索的配置(红色框内) 是否显示检索部分 检索的内容是如何生效的 工具栏的配置(黄色框内) 表 ...

  9. selenium元素定位学习笔记

    一,定位原则 稳定 简单灵活 唯一 WebDriver提供了两种方式来定位页面元素,分别是find_element_by_XXX和find_elements_by_XXX.第一种方式的结果是在正常情况 ...

  10. CSP-S2020AFO记

    2020-10.11 考初赛辣. 选择题考了一堆时间复杂度,一个不会(卒) 我寻思这01背包哪里能用贪心? 啊,这,这,这手写快排竟如此简单,手写取Max,手写队列,两个字符串颠来倒去,竟活到爆! 震 ...