我正在使用以下Javascript代码动态生成excel,它将HTML表格转换为电子表格。
excel文件无法在Office 2010中打开,显示为空白。 Openoffice将打开相同的电子表格。可能是什么问题?这是与encoding
function ExcelReport() {
var tab_text = '<html xmlns:x="urn:schemas-microsoft-com:office:excel">';
tab_text = tab_text + '<head><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>';
tab_text = tab_text + '<x:Name>Test Sheet</x:Name>';
tab_text = tab_text + '<x:WorksheetOptions><x:Panes></x:Panes></x:WorksheetOptions></x:ExcelWorksheet>';
tab_text = tab_text + '</x:ExcelWorksheets></x:ExcelWorkbook></xml></head><body>';
tab_text = tab_text + "<table>";
var headingTable = $('#h_tbl').clone();
tab_text = tab_text + headingTable.html();
tab_text = tab_text + '</table>';
$('.c_tbl').each(function( index ) {
tab_text = tab_text + "<table>";
tab_text = tab_text + "<tr><td></td></tr><tr><td></td></tr>";
tab_text = tab_text + '</table>';
tab_text = tab_text + "<table>";
var exportTable = $(this).clone();
tab_text = tab_text + exportTable.html();
tab_text = tab_text + '</table>';
});
tab_text = tab_text + '</body></html>';
var fileName = name + '.xls';
var blob = new Blob([tab_text], { type: "application/vnd.ms-excel;charset=utf-8" })
window.saveAs(blob, wo_var + ".xls");
}
当我在记事本中打开excel时,html代码如下所示
<html xmlns:x="urn:schemas-microsoft-com:office:excel"><head><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>
<tbody><tr><td>abc:</td></tr></tbody></table></body></html>
答案 0 :(得分:43)
我们遇到同样的问题,客户的投诉太多了。我们将其追溯到2016年7月12日发布的Excel OFffice Security补丁KB3115262 - https://support.microsoft.com/en-us/kb/3115262
要解决此问题,我们让客户在其Excel中进行更改以允许来自互联网的文件。
修复: 1)打开Excel转到文件选项
2)点击信任中心 - &gt;信任中心设置
3)转到受保护的视图。有3个选项显示全部点击
我们取消选中第一个选项 - &#34;为来自互联网的文件启用受保护的视图&#34;
解决了这个问题。也许不是最好的解决方案。我不确定为什么这个特定的KB会破坏这个,但我想也许文件格式不是预期的,这个设置彼此冲突。
在我没有安装此KB的计算机上,所有这些都已经过检查,它仍然可以正常工作(不是空白但提示文件格式不同),我想在受保护的视图中显示。
是什么导致我们事实并非文件的内容是我们注意到如果我们在记事本或记事本++中重新保存文件而不做任何更改,文件表现良好所以excel必须读取文件的某些属性而不是内容阻止它。
答案 1 :(得分:3)
您正在将包含HTML内容的文件保存为var config = new MapperConfiguration(x =>
{
x.CreateMap<SomeClassADto, SomeClassB>()
.ForMember(i => i.Id, i => i.MapFrom(src => src.Member_Id))
.ForMember(i => i.Name, i => i.MapFrom(src => src.Member_Name));
x.CreateMap<SomeClassADto, SomeClassA>()
.AfterMap((s, d, r) => d.Member = r.Mapper.Map<SomeClassB>(s));
});
IMapper mapper = config.CreateMapper();
var foo = mapper.Map<SomeClassA>(new SomeClassADto() { Id = 1, Member_Id = 2, Member_Name = "Name" });
。 Excel可以打开它,但会正常显示警告信息:
您尝试打开的文件&name; #e;&#39;,格式不同 比文件扩展名指定的。验证文件不是 在打开文件之前损坏并来自受信任的来源。你呢 想立即打开文件?
如果没有发出警告且文件没有打开,那么可能是
*.xls
DWORD
中ExtensionHardening
的值HKEY_CURRENT_USER\Software\Microsoft\Office\<version number>\Excel\Security
设置为2
中的Windows Registry
这意味着&#34;检查文件扩展名和文件类型。如果它们不匹配,请不要打开文件。&#34;
见https://support.microsoft.com/en-us/kb/948615。
也许您的管理员已通过组策略设置进行了设置。如果您在管理网络中,请询问您的管理员。
如果您是自己的管理员,请查找该注册表设置并将其更改为默认的1
。
答案 2 :(得分:3)
而不是:
我们取消选中第一个选项 - &#34;为来自互联网的文件启用受保护的视图&#34;哪个不安全
这样做:
转到文件的属性,然后单击取消阻止(如果您知道该文件是安全的)。
答案 3 :(得分:2)
我有一个类似的问题,内联网明智。当用户点击打开时,网格导出到HTML Excel突然停止工作。快速解决方法,保存并打开下拉选项或只保存然后打开。
我的修复方法是将内容处置从附加内联更改为内联。现在,用户获得了旧的弹出式中心页面,而不是底部的那个,打开工作就好了。
答案 4 :(得分:1)
类似的问题,我的代码使用StringWriter,HTMLTextWriter和RenderControl从GridView转储到XLS文件。
由于我们的ASP.NET代码在公司内部网上运行,因此我们在整个公司中卸载了以下更新,而不是进入100多台用户PC并更改其设置。
卸载:
这解决了我们的问题,也会修复您和受这些更新影响的其他人。
答案 5 :(得分:1)
对于那些更安全的偏执狂,我在SalesForce网站上看到了另一个答案,该答案也应该有效 - https://success.salesforce.com/answers#!/feedtype=SINGLE_QUESTION_DETAIL&dc=All&criteria=BESTANSWERS&id=9063A000000iTIyQAM
基本上将您正在下载的网站标记为安全。
我自己没有尝试过
基本打开您将在Internet Explorer中下载Excel文件的网站
转到“设置” 互联网选项 安全 可信任的网站 网站 添加
这应该在允许的情况下添加相关网站,然后您可以使用您想要的任何浏览器,例如firefox / chrome等。
答案 6 :(得分:1)
问题的可能修复:
解决方案1:
1)在开始菜单中输入Regedit
2)导航到注册表,
在注册表中:HKEY_CURRENT_USER \ Software \ Microsoft \ Office \\ Excel \ Security
where =
15.0 for Office 2013
16.0 for Office 2016
12.0 for Office 2010
创建一个DWORD(32位)值并命名为:ExtensionHardening。 可能的值是:
0: Do not check the file name extension and
the file type, and bypass the function of the warning message.
1: Check the file name extension and the file type.
If they do not match, display the warning message.
2: Check the file name extension and the file
type. If they do not match, do not open the file.
使用1作为值。
解决方案2:
右键单击Excel - &gt;属性 - &gt;取消阻止 - &gt;确定。
SOlution 3
卸载更新:
Windows Update KB3115272(Excel 2016/64位)
Windows Update KB3115262(Excel 2013)
Windows Update KB3115130(Excel 2010)
有关该问题的详细信息。请参阅以下链接。 https://social.technet.microsoft.com/Forums/en-US/d2d84793-9920-45e3-baef-5027a4ac1ae0/kb3170008-for-office-2016-breaks-functionality-ms16088?forum=officeitpro
答案 7 :(得分:0)
Microsoft于8月9日修补了Excel以恢复原始功能。滚动到8月9日在此主题中发布以获取更多信息:https://social.technet.microsoft.com/Forums/en-US/d2d84793-9920-45e3-baef-5027a4ac1ae0/kb3170008-for-office-2016-breaks-functionality-ms16088?forum=officeitpro
更新Excel为我解决了问题。