我有一个vba宏,它对当前文档进行了一些更改并确定了应该用于它的文件名 - 如果文档没有保存为该文件名但是应该提示用户这样做(但应该能够改变)默认设置).
我发现两种可能性都不完美(我需要混合使用这两种).
第一种方法:
Application.Dialogs(wdDialogFileSaveAs).Show
Run Code Online (Sandbox Code Playgroud)
打开Save As对话框并允许您更改文件的格式和名称,但默认文件名是旧文件名或文档的标题(最多为第一个特殊字符,如空白或-)(如果尚未保存) - 更改文档的标题几乎没有帮助,因为建议的文件名将包含-).是否可以更改Save As对话框中显示的初始文件名?
第二种方法:
Application.FileDialog(msoFileDialogSaveAs).InitialFileName = filename
Dim choice As Integer
choice = Application.FileDialog(msoFileDialogSaveAs).Show
If choice <> 0 Then
filename = Application.FileDialog(msoFileDialogSaveAs).SelectedItems(1)
Call ActiveDocument.SaveAs(filename:=filename, FileFormat:=wdFormatDocumentDefault)
End If
Run Code Online (Sandbox Code Playgroud)
将FileDialog只会选择一个文件名,所以我们必须明确地保存它.这种方法将显示filename我想要的,但如果用户将后缀更改为例如.pdf文件仍将以.docx格式保存(使用后缀.pdf).我并没有计划在这里对用户需要不同格式的罕见情况进行大量区分.docx.有没有一种简单的方法可以使用第二种方法以正确的格式保存文件?
我正在从事C#/ ASP.NET网络工作,并希望进行Excel导出.首先我找到了OpenXML,做了一些初步的步骤,但它真的很难用.现在,我正在使用ClosedXML,这是一个相当宽慰 - 到目前为止.
我想出了一个问题,就是在表格单元格上进行渐变填充...没有像普通填充那样的问题
worksheet.Cell(1,1).Style.Fill.SetBackgroundColor(XLColor.Red);
Run Code Online (Sandbox Code Playgroud)
或者像图案一样
worksheet.Cell(1,1).Style.Fill.PatternType = XLFillPatternValues.LightHorizontal;
worksheet.Cell(1,1).Style.Fill.PatternColor = XLColor.Green;
worksheet.Cell(1,1).Style.Fill.PatternBackgroundColor = XLColor.White;
Run Code Online (Sandbox Code Playgroud)
但是如何做GradientFill呢?据我所知,ClosedXML是基于OpenXML SDK构建的,所以应该可以做一个GradientFill - 就像(我还没测试)
GradientFill gFillEx = new GradientFill();
GradientStop gStop1st = new GradientStop();
gStop1st.Position = 0;
gStop1st.Color = new Color { Rgb = HexBinaryValue.FromString("00FF00") };
GradientStop gStop2nd = new GradientStop();
gStop2nd.Position = 1;
gStop2nd.Color = new Color { Rgb = HexBinaryValue.FromString("FFFFFF") };
gFillEx.InsertAt<GradientStop>(gStop1st, 0);
gFillEx.InsertAt<GradientStop>(gStop2nd, 1);
Run Code Online (Sandbox Code Playgroud)
但是如何进行 - 如何将此gFillEx设置为单元格的填充样式?我也不介意在这里直接使用styles.xml文件中的xml - 如果我只知道放在哪里.
任何提示或有用的想法?谢谢.
我有一个ModelA成员toBeRemoteChecked模型MapToA和一个成员模型valueToMap.每当我创建一个实例时ModelA,我也需要一个实例MapToA,所以我有一个CreateModelA包含成员modelA和成员的模型valueToMap.提交表单时,我将添加modelA到数据库表ModelA并创建并添加一个实例,MapToA其中包含id modelA和valueToMap.在代码方面
public class ModelA
{
[Key]
public int ID { get; set; }
[Required, Remote("isValid", "MyController", ErrorMessage = "not valid")]
public string toBeRemoteChecked { get; set; }
}
public class MapToA
{
[Key]
public int Map_ID { get; set; }
[Required]
public int modelAID { get; set; }
[Required]
public int valueToMap …Run Code Online (Sandbox Code Playgroud) 我想创建一个包含来自数据库的数据的演示文稿.我设法获得在PowerPoint中打开的有效演示文稿(SDK 2.5 的Open XML Productivity Tool对此有很大帮助).但是,如何计算文本框形状的大小?我看到放置值的位置,但new Extents()默认为零宽度和高度.当我Shape从现有演示文稿中获取a的某些值时,我可能会获得正确的高度(至少对于带有一行或固定行数的文本),但文本将溢出到右侧或底部(取决于wordwrap)设置).
也将NormalAutoFit在BodyProperties的TextBody不帮助-为必要的值FontScale并LineSpaceReduction没有在计算的OpenXML.
那么,设置Extentsa 的最佳做法Shape是TextBody什么?
是否有内置的方法来计算Extents给定的TextBody或Shape?(内置方法的一些经验法则会比什么都好)
我知道PowerPoint将重新计算NormalAutoFit任何更改后的值(至少在更改之前和之后的一堆幻灯片),但是在更改之前启动演示文稿时(或者如果它是从PowerPoint查看器开始).
我正在尝试使用 SonarQube 分析一个巨大的 Java 项目(超过 100 万行代码)(由于给出了规则集,因此版本必须为 4.5.6,我们不允许更改它,某些规则和插件也不允许更改) t 与 5.x 一起使用)并绊倒无用的代码重复消息。该项目使用 EJB,因此每个类中都有许多代码片段与所有这些 ejb 方法(大多数类中的大多数为空)重复。这些都被标记为重复,导致日志中的重复消息过多。
Futheron:由于项目庞大,有许多文件需要导入相同的包,因此代码中有许多相同导入行的块被报告为重复 - 但有什么合规的解决方案可以避免这种情况那种重复?或者是否有一些有用的配置会忽略这些导入行块但不会忽略其他重复的代码?(之前在这里问过这种子问题: SonarQube - 重复块,如何更改配置- 但不清楚哪个 SonarQube 版本,所以这在 SQ 4.5.6 中可能有所不同)
此外:有许多简单的 getter 和 setter 方法 - 由于它们具有相同的结构,并且大多是一个衬垫,只是名称和 set/get 成员不同,这些也被发现为重复代码。
总体而言:我收到了数以千计的重复消息,但还没有找到一个真正的代码重复,因为那些真正的重复被所有那些错误的重复所掩盖。
那么如何配置 SonarQube 代码重复以使其有用。感谢您的任何提示。到目前为止,我对这个问题的解决方案是:忽略它 - 在数千个误报中搜索一个命中是没有意义的。
我在这里发现了一些类似的问题,但是不完整的答案没有帮助,并且产生了更多的混淆而不是澄清任何事情,所以这是我尝试提出一个更有条理的问题并获得有希望的答案,这将有助于更多的用户.
我的简化示例:我有一个带有两个不同构造函数的Java类
public class ObjectOfInterest {
public ObjectOfInterest(String string, Integer int) { ... }
public ObjectOfInterest(String string1, String string2) { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
我需要对这些构造函数的调用进行一些编译时验证.参数string2必须是一些文字,我想根据内容将调用标记为警告(即发出警告,当它不是文字或文字格式不正确时).
不幸的是,使用Eclipse进行Java验证的文档并不容易理解,有时已经过时,在我看来似乎不完整,并且似乎没有一个工作示例,它足够短,可以在教程中使用.
我的目标:第一步:我想要一个验证器来标记这两个参数版本的调用并带有警告 - 只是为了开始某个地方并了解基础知识.
我已经发现迄今:我见过的几个例子,做一个public class MyValidator implements IValidator, ISourceValidator地方IValidator需要实现的方法public void validate(IValidationContext arg0, IReporter arg1) throws ValidationException,似乎是从旧版本的验证框架的(有时我发现只是评论空方法没用),并且ISourceValidator需要实现一个方法public void validate(IRegion arg0, IValidationContext arg1, IReporter arg2)- 这似乎是更新的版本.
然后你必须为一些添加一些扩展点plugin.xml(我不完全清楚这个plugin.xml的位置).
凡我刺在黑暗中:这是完全不清楚如何一起工作IRegion,IValidationContext和IReporter-也许我是在完全错误的方式,但我该怎么来到这里的?如何在验证中找到该构造函数的调用?
在第一步更清楚之后,我会扩展这个问题.Outlook,我想要为构造函数的两个String版本添加快速修复的可能性并以这种方式操作代码 - …
SonarQube 规则鱿鱼:S1948要求可序列化类的所有字段都是可序列化的或瞬态的。另一条规则指出,应该使用接口而不是实现类型。
当我有一个
public class myClass implements Serializable
{
List<String> names;
...
}
Run Code Online (Sandbox Code Playgroud)
那么names应该是 aList<String>而不是 eg ArrayList<String>。但规则 S1948 告诉我们这List是不可序列化的。
乍一看,解决方案:定义一个interface SerializableList- 可能像这样:
public interface SerializableList<E> extends List<E>, Serializable
{
}
Run Code Online (Sandbox Code Playgroud)
如果我们声明names是一个
SerializableList<String> names;
Run Code Online (Sandbox Code Playgroud)
规则 S1948 中的警告已消失,但分配names = new ArrayList<String>();结果为Type mismatch: cannot convert from ArrayList<String> to SerializableList<String>.
两个问题:
List<String> names = new ArrayList<String>();在没有警告的情况下声明,也不需要强制转换,但不能声明SerializableList<String> names = new ArrayList<String>();?我想知道,因为ArrayList<E> …我发现Rotativa是一种轻松导出为PDF的方法(除了CSS3之外几乎完全没有支持,可能在将来的版本中使用)...但我想知道如何处理该FileName选项.
当我
return new Rotativa.ViewAsPdf("myViewName", "~/Views/Shared/_PDFLayout.cshtml", myModel)
{
FileName = "myCorrectlyNamed.pdf",
PageSize = ... // plus some more options
};
Run Code Online (Sandbox Code Playgroud)
然后我会myCorrectlyNamed.pdf下载.当我省略该FileName选项时,PDF将显示在浏览器中,但是当我从那里保存时,它只有默认文件名document.pdf.
如何在浏览器中生成和显示pdf,并且文件名不是document.pdf从那里保存的?
这里一定已经有解决方案,但我找不到它......我想做的事情:
在Windows桌面上创建一个链接,双击该链接将执行batch.bat并在stdout和stderr上输出一些内容,我希望在控制台和日志文件中都有输出。
对于这一部分,我以这样的方式结束:
powershell.exe -NoExit C:\mypath\mybatch.bat | tee 2>&1 mylog.log
Run Code Online (Sandbox Code Playgroud)
这符合我的要求,但我希望日志文件的名称类似于mylog-20160317-2125.log
我知道在 powershell 中有类似[datetime]::now.tostring("yyyyMMdd-HHmm")和Get-Date -f yyyyMMdd-HHmm
但是我怎样才能在上面的命令行中输入一个或另一个来获取所需的日志文件名呢?
谢谢你的帮助 ...
c# ×3
java ×3
asp.net-mvc ×2
openxml-sdk ×2
sonarqube ×2
validation ×2
arraylist ×1
asp.net ×1
batch-file ×1
closedxml ×1
eclipse ×1
ms-word ×1
openxml ×1
powerpoint ×1
powershell ×1
rotativa ×1
vba ×1