从Excel范围获取最大行/列编号

时间:2016-02-15 11:43:20

标签: c# excel interop

我有一个Range,例如:

Range rng = activeWorksheet.Range["A1", "B50"];

我一直在检索此Range中使用的最大行数和列数,方法是循环遍历它并为我的变量分配行号,但必须有更好的方法吗?我一直这样做:

int maxRow = 0;
foreach (Range row in rng.Rows)
     maxRow = row.Row;

4 个答案:

答案 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将为您提供空行,在我的情况下我们没用。