我有一个Range
,例如:
Range rng = activeWorksheet.Range["A1", "B50"];
我一直在检索此Range
中使用的最大行数和列数,方法是循环遍历它并为我的变量分配行号,但必须有更好的方法吗?我一直这样做:
int maxRow = 0;
foreach (Range row in rng.Rows)
maxRow = row.Row;
答案 0 :(得分:2)
我认为我找到了最优雅的解决方案,如下所示:
int maxRow = rng.Row + rng.Rows.Count - 1;
int maxColumn = rng.Column + rng.Columns.Count - 1;
rng.Row
将检索范围中第一个使用的行号,rng.Rows.Count - 1
将检索此范围内使用的总行数,我们还会扣除1
以获取正确的最大行数号。
答案 1 :(得分:1)
你如何搜索最后使用过的Row?
public int FindLastFilledRowInRange(Range range)
{
var cell = range.Find("*", SearchOrder: Excel.XlSearchOrder.xlByRows, SearchDirection: Excel.XlSearchDirection.xlPrevious);
return cell.Row;
}
如果你从第1行开始,你可以在返回的行上做一些额外的数学运算......
答案 2 :(得分:1)
如果你不介意评估字符串地址...... 通过使用“.EntireRow.Address(False,False)”,我们得到一个易于解析的字符串......
C#...
<?php
session_start();
$id = $_SESSION['news_id'];
include_once('connection.php');
$sql = "SELECT * FROM news WHERE news_id = '$id'";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)){
$title = $row['news_title'];
$date = $row['news_date'];
$content = $row['news_content'];
$newsimage = $row['news_image'];
}
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<form method="post" action ="" enctype="multipart/form-data">
Title<input type ="text" name ="title" value="<?php echo $title;?>"/><br>
Date<input type ="text" name="date" value="<?php echo $date;?>" /><br>
Content<textarea name="content"><?php echo $content;?></textarea>
<input type="submit" name="submit" value="Update" />
<input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
<img id="blah" src="<?php echo $newsimage;?>" alt="your image" style="width:200px; height:140px;"/>
</form>
<hr>
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
VB ......;
int maxRow = range.EntireRow.Address(false, false).Split(",:".ToCharArray()).Select(n => int.Parse(n)).Max();
string maxCol = range.EntireColumn.Address(false, false).Split(",:".ToCharArray()).Select(s => s.PadLeft(3)).Max().Trim();
给定范围BB9:C11
maxRow从9:11开始是11 ...如果没有解析为int,那么由于字符串排序,Max()将为9
maxCol是来自C:BB的“BB”...如果没有填充左边,那么由于字符串排序,Max()将是“C”
Dim maxRow As Integer = -1
Dim maxCol As String = ""
range = ws.Range("$BB9:$C11")
maxRow = range.EntireRow.Address(False, False).Split(",:".ToCharArray()).Select(Function(n) Integer.Parse(n)).Max() ' 9:11
maxCol = range.EntireColumn.Address(False, False).Split(",:".ToCharArray()).Select(Function(s) s.PadLeft(3)).Max().Trim() ' C:BB
且给定范围非连续范围:A1:A3,AE15:AE9,C4:C7
maxRow从1:3,9:15,4:7开始是15 ...即使是非连续范围,并且按顺序引用= AE15:AE9
maxCol是来自C:AE的“AE”......即使是非连续范围
这适用于整个COLUMN选择“A:A”
这不适用于整行选择“3:3”
答案 3 :(得分:-1)
我在之前的项目中有这个:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
使用lastRow将为您提供空行,在我的情况下我们没用。