使用VBA,是否可以按像素或单位获得给定范围的大小?(我不关心哪个单位,因为我只使用它与相同单位的其他测量相关).
谢谢.
我知道你可以轻松地获取一系列单元格并将它们打成Variant数组,但我想使用字符串数组(因为它是单维的,占用的内存比Variant数组少).
有没有办法自动将范围转换为字符串数组?
现在我正在使用一个函数来获取范围并将值保存在变量数组中,然后将变量数组转换为字符串数组.它工作得很好,但我正在寻找一种直接从范围到字符串数组的方法.任何帮助将不胜感激.
Function RangeToArray(ByVal my_range As Range) As String()
Dim vArray As Variant
Dim sArray() As String
Dim i As Long
vArray = my_range.Value
ReDim sArray(1 To UBound(vArray))
For i = 1 To UBound(vArray)
sArray(i) = vArray(i, 1)
Next
RangeToArray = sArray()
End Function
Run Code Online (Sandbox Code Playgroud)
更新:在将数据转换为一维字符串数组之前,看起来没有办法跳过将数据抛入变量数组的步骤.如果它是真的是一种耻辱(即使它不需要太多努力,我喜欢超优化,所以我希望有一种方法可以跳过这一步).如果没有解决方案,我会在几天内结束这个问题.谢谢你的帮助,伙计们!
更新2:答案是西蒙,他付出了很大的努力(其他人也是如此),并且完全指出,一次性从阵列到阵列阵列确实是不可能的.感谢大家.
我正在尝试创建一个脚本来浏览索引,查看每个页码,然后告诉我该条目的书的哪一章.这是我正在做的事情的近似值:
@chapters = {
1 => "introduction.xhtml",
2..5 => "chapter1.xhtml",
6..10 => "chapter2.xhtml",
11..18 => "chapter3.xhtml",
19..30 => "chapter4.xhtml" }
def find_chapter(number)
@chapters.each do |page_range, chapter_name|
if number === page_range
puts "<a href=\"" + chapter_name + "\page" + number.to_s + "\">" + number.to_s + </a>"
end
end
end
Run Code Online (Sandbox Code Playgroud)
find_chapter(1)会吐出我想要的字符串,但find_chapter(15)不会返回任何内容.是不是可以像这样使用范围?
我到目前为止设计的方法是这样的:
func randRange (lower : Int , upper : Int) -> Int {
let difference = upper - lower
return Int(Float(rand())/Float(RAND_MAX) * Float(difference + 1)) + lower
}
Run Code Online (Sandbox Code Playgroud)
这会生成低位和高位之间的随机整数.
我有一个contenteditablediv和几段.
这是我的代码:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div id="main" contenteditable="true"
style="border:solid 1px black; width:300px; height:300px">
<div>Hello world!</div>
<div>
<br>
</div>
<div>This is a paragraph</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
假设,我想做一个范围选择,其中包含字符串"world!This is"
怎么做?
有没有办法在W3C兼容的浏览器中获取JavaScript范围对象的html字符串?
例如,假设用户选择以下内容:Hello <b>World</b>
可以使用该Range.toString()方法将"Hello World"作为字符串.(在Firefox中,也可以使用文档的getSelection方法.)
但我似乎无法找到获取内部HTML的方法.
经过一番搜索,我发现范围可以转换为DocumentFragmentObject.
但是DocumentFragments没有innerHTML属性(至少在Firefox中;没有尝试过Webkit或Opera).
这对我来说似乎很奇怪:显然应该有一些方法来访问所选项目.
我意识到我可以创建一个documentFragment,将文档片段附加到另一个元素,然后获取该innerHTML元素.
但该方法将自动关闭我选择的区域内的任何打开的标签.
除此之外,肯定有一个明显的"更好的方法",而不是将它附加到dom只是为了让它成为一个字符串.
那么,如何获取Range或DocFrag的html字符串?
是否可以为范围元素中的步骤参数指定小数?根据我读过的一些文章,包括一篇关于Nettuts的文章,这应该是可能的.这似乎不适用于任何浏览器.我尝试过Chrome,Safari和移动版Safari.我在这里误解了简单,还是这个还没有得到支持?
<input id='something' type='range' min='0' max='20' step='.25' value='5' />
Run Code Online (Sandbox Code Playgroud) 我在列表中有一些数据需要查找连续的整数运行(我的脑子想rle但不知道如何在这里使用它).
查看数据集并解释我所追求的内容会更容易.
这是数据视图:
$greg
[1] 7 8 9 10 11 20 21 22 23 24 30 31 32 33 49
$researcher
[1] 42 43 44 45 46 47 48
$sally
[1] 25 26 27 28 29 37 38 39 40 41
$sam
[1] 1 2 3 4 5 6 16 17 18 19 34 35 36
$teacher
[1] 12 13 14 15
Run Code Online (Sandbox Code Playgroud)
期望的输出:
$greg
[1] 7:11, 20:24, 30:33, 49
$researcher
[1] 42:48
$sally
[1] 25:29, 37:41
$sam
[1] …Run Code Online (Sandbox Code Playgroud) 当您按contentEditable元素上的Enter键时,每个浏览器都会以不同方式处理生成的代码:Firefox会插入BR标记,Chrome会在Internet Explorer插入P标记时插入DIV标记.
我拼命寻找解决方案,至少为所有浏览器使用BR或P,最常见的答案是:
插入BR标签:
$("#editableElement").on("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br");
range.deleteContents();
range.insertNode(br);
range.setStartAfter(br);
range.setEndAfter(br);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为似乎浏览器不知道如何设置插入符号,<br>这意味着以下操作没有做任何有用的事情(特别是如果在插入符号放在文本末尾时按Enter键):
range.setStartAfter(br);
range.setEndAfter(br);
Run Code Online (Sandbox Code Playgroud)
有些人会说:使用double <br><br>但是当你在文本节点中按Enter键时会产生两个换行符.
其他人会说总是<br>在contentEditable的末尾添加一个额外的,但是如果你有一个<div contenteditable><p>text here</p></div>并且你把光标放在文本的末尾然后点击回车,你将得到错误的行为.
所以我对自己说,也许我们可以使用P而不是BR,常见的答案是:
插入P标签:
document.execCommand('formatBlock', false, 'p');
Run Code Online (Sandbox Code Playgroud)
但这也不能始终如一地发挥作用.
如您所见,所有这些解决方案都有待改进.还有其他解决方案可以解决这个问题吗?
如何std::array从范围初始化(由一对迭代器定义)?
像这样的东西:
vector<T> v;
...
// I know v has exactly N elements (e.g. I just called v.resize(N))
// Now I want a initialized with those elements
array<T, N> a(???); // what to put here?
Run Code Online (Sandbox Code Playgroud)
我以为array会有一个构造函数接受一对迭代器,所以我可以做array<T, N> a(v.begin(), v.end()),但它似乎根本没有构造函数!
我知道我可以copy将矢量放入数组中,但我宁愿直接用矢量内容初始化数组,而不是先默认构造它.我怎么能够?