(注意:请参阅下面的解决方案.)
我一直在尝试使用VBA从word文档中的各种标题页面中检索页码.我当前的代码返回2或3,而不是正确关联的页码,具体取决于我在主Sub中使用它的位置和方式.
astrHeadings = docSource.GetCrossReferenceItems(wdRefTypeHeading)
For Each hds In astrHeadings
docSource.Activate
With Selection.Find
.Text = Trim$(hds)
.Forward = True
MsgBox hds & ":" & Selection.Information(wdActiveEndPageNumber), vbOKOnly
End With
Selection.Find.Execute
Next
Run Code Online (Sandbox Code Playgroud)
docSource是我设置的测试文档,有3个页面的10个标题.我从getCrossReferenceItems后面的代码中使用的方法中检索了标题.
我正在尝试的是循环遍历getCrossReferenceItems方法的结果,并在查找对象中使用它们docSource,从中确定结果是什么页面.然后,我的代码中的页码将在稍后的字符串中使用.这个字符串加上页码将被添加到另一个在我的主子开头创建的文档中,其他所有文件都可以处理,但这个代码段.
理想情况下,我需要这个段做的是用每个Find结果中的相关页码填充第二个数组.
解决问题
谢谢凯文,你在这里得到了很大的帮助,我现在已经从我的输出中得到了我所需要的Sub.
docSource是我设置的测试文档,有3个页面的10个标题.docOutline是一个新文档,它将作为目录文档.
我不得不Sub在Word的内置TOC功能上使用它,因为:
我有多个文件要包含,我可以使用该RD字段来包含这些但是
我有另一个Sub在每个文档0.0.0(chapter.section.page代表)中生成自定义十进制页面编号,对于整个文档包有意义,需要作为页码包含在TOC中.可能有另一种方法可以做到这一点,但我发现了Word的内置功能.
这将成为我的页面编号中包含的功能Sub.我现在是完成这个小项目的3/4,最后一个季度应该是直截了当的.
修改并清理了最终代码
Public Sub CreateOutline()
' from http://stackoverflow.com/questions/274814/getting-the-headings-from-a-word-document
Dim docOutline As Word.Document
Dim docSource As Word.Document
Dim rng As Word.Range
Dim strFootNum() As Integer …Run Code Online (Sandbox Code Playgroud) 是否有一种向脚本添加帮助功能的标准方法?最简单的方法可能是参数并打印一些文本,如果它是"-help"或其他东西.有没有人有关于如何做到这一点的任何例子?
谢谢!
documentation perl getopt-long command-line-arguments perl-pod
以下代码是否始终在perl中运行?
for loop iterating over @array {
# do something
if ($condition) {
remove current element from @array
}
}
Run Code Online (Sandbox Code Playgroud)
因为我在Java中知道这导致了一些异常,上面的代码现在对我有用,但我想确保它适用于perl中的所有情况.谢谢
根据早午餐文档,配置文件中的属性"conventions.assets"应该是一个正则表达式,但我试图包括以下内容:
conventions: {
assets: /^app\/.*\.html/
}
Run Code Online (Sandbox Code Playgroud)
为了将所有htmls添加到公用文件夹中.(我知道我可以创建一个资源文件夹并包含所有内容,但根据我们已经同意的结构,目前还不可能).
我认为这个属性需要一个目录,在这种情况下我可以修复这个值以达到我的目标吗?可能有一个功能吗?
当我使用时,特殊构造的字符串的打印方式不同
print $b;
Run Code Online (Sandbox Code Playgroud)
或者
print for split //, $b;
Run Code Online (Sandbox Code Playgroud)
一个最小的例子是:
#!perl
use warnings;
use strict;
use Encode;
my $b = decode 'utf8', "\x{C3}\x{A1}\x{E2}\x{80}\x{93}\x{C3}\x{A1}"; # 'á–á' in Unicode;
print $b, "\n";
print for split //, $b
Run Code Online (Sandbox Code Playgroud)
控制台屏幕上的输出(我想我使用的是 cp860)是:
Wide character in print at xx.pl line 9.
?íÔÇô?í
Wide character in print at xx.pl line 10.
ßÔÇôß
Run Code Online (Sandbox Code Playgroud)
或十六进制:
C3 A1 E2 80 93 C3 A1
E1 E2 80 93 E1
Run Code Online (Sandbox Code Playgroud)
(0D 0A当然由分隔,即,\r\n)。
问题是为什么角色呈现不同?
令人惊讶的是,如果没有 em-dash,效果就会消失。对于较长的字符串,可以看到效果,如以下示例所示。
对于字符串 'Él es …
考虑以下代码:
test_string = 'not empty'
if test_string:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我知道我可以构造一个条件表达式来做到这一点:
return True if test_string else False
Run Code Online (Sandbox Code Playgroud)
但是,当我宁愿返回布尔值时,我不喜欢测试布尔值是真还是假.我怎么才能恢复它的真实性?
我试图解决一个问题,即编写python代码以添加两个整数而不使用'+'或' - '运算符.我有以下代码,它适用于两个正数:
def getSum(self, a, b):
while (a & b):
x = a & b
y = a ^ b
a = x << 1
b = y
return a ^ b
Run Code Online (Sandbox Code Playgroud)
如果输入是两个正整数或两个负整数,那么这段代码就可以完美地工作,但是当一个数字为正数而另一个数字为负数时,它会失败.它进入无限循环.知道为什么会这样吗?
假设我有一个程序输出:
abcd
l33t
1234
Run Code Online (Sandbox Code Playgroud)
我会用它来模拟printf 'abcd\nl33t\n1234\n'.我想同时将这个输出提供给两个程序.我的想法是使用进程替换tee.假设我想将输出的副本提供给grep:
printf 'abcd\nl33t\n1234\n' | tee >(grep '[a-z]' >&2) | grep '[0-9]'
Run Code Online (Sandbox Code Playgroud)
我使用Bash 4.1.2(Linux,CentOS 6.5)得到以下内容,这很好:
l33t
1234
abcd
l33t
Run Code Online (Sandbox Code Playgroud)
但是如果进程替换没有被重定向到stderr(即没有>&2),就像这样:
printf 'abcd\nl33t\n1234\n' | tee >(grep '[a-z]') | grep '[0-9]'
Run Code Online (Sandbox Code Playgroud)
然后我得到:
l33t
1234
l33t
Run Code Online (Sandbox Code Playgroud)
这就像进程替换的stdout(第一个grep)被管道(第二个grep)之后的进程使用.除了第二个grep已经自己读取东西,所以我想它不应该考虑第一个grep中的东西.除非我弄错了(我肯定是).
我错过了什么?
我在我的网站上使用了markedjs降价解析器,但表格语法的样式不正确(没有边框和条纹)。我的代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>Marked in the browser</title>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
</head>
<body>
<div id="content"></div>
<script>
document.getElementById('content').innerHTML =
marked(`
First Header | Second Header
------------ | -------------
Content Cell | Content Cell
Content Cell | Content Cell
`);
</script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
为什么下面的use行是合法的 Perl 语法?(改编自父级POD ;在 Cygwin 上的 Perl 5.26.2 x64 上进行测试。)
package MyHash;
use strict;
use Tie::Hash;
use parent -norequire, "Tie::StdHash";
# ^^^^^^^^^^ A bareword with nothing to protect it!
Run Code Online (Sandbox Code Playgroud)
在 下-MO=Deparse,该use行变为
use parent ('-norequire', 'Tie::StdHash');
Run Code Online (Sandbox Code Playgroud)
但我无法从use文档中看出 引用的来源-norequire。
如果use strict不是强制的话,我会理解的。裸字norequire将变成 string "norequire",一元减号将将该字符串变成"-bareword",并且生成的字符串将进入use导入列表。例如:
package MyHash;
use Tie::Hash;
use parent -norequire, "Tie::StdHash";
Run Code Online (Sandbox Code Playgroud)同样,如果有一个粗逗号,我也会理解。 -foo => bar变成"-foo", …
perl ×4
python ×2
string ×2
arrays ×1
bareword ×1
bash ×1
boolean ×1
brunch ×1
css ×1
getopt-long ×1
html-table ×1
iteration ×1
javascript ×1
perl-pod ×1
pipeline ×1
punctuation ×1
python-3.x ×1
syntax ×1
truthiness ×1
unicode ×1
utf-8 ×1
vba ×1
word-vba ×1