- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑到您只使用 Internet Explorer(这在大型企业中很常见),您得出结论,您可以为用户提供将 HTML GridView 转换为 Excel 文件的可能性:此外,您只是认为您有按照用户的要求去做...
我第一次从外部向 Excel 写入表格(或数组)是使用 Visual Basic(.net 的服务器端)。所以我写了一个类来将 VB 二维数组传播到 Excel 工作表中:
1) 我使用的第一种方法乍一看似乎不错,顺便说一下,它非常简单:在行循环中设置列循环,然后将 VB 数组中的每个值写入 Excel 工作表。就这样:
Dim j, k as Integer
Dim Valeur as String
'let us suppose the VB 2D-array is "Tab(10,20)", containing 11 rows of 21 columns of strings
'let us suppose the upper left corner of the Excel range is line 7, column 3:
For j = 0 to 10
For k = 0 to 20
Valeur = Tab(j, k)
Cells(j + 7, k + 3).Value = valeur
Next
Next
2) 对上述方法进行编程后,我最终意识到,尽管它简单且合乎逻辑,但它是一种糟糕的方法,原因只有一个:它非常慢!所以我找到了一个更好的方法,包括一次写入整个单元格范围:
Feuil.Range("C7:W17").Value = Tab
第一种和第二种方法有什么区别?好吧,这两种方法都可以正常工作,但是如果你考虑一个 300 行 20 列(或 6000 个单元格)的表格,第一种方法花费的时间约为 1 分钟,而第二种方法只需要半秒!
因此,当谈到 JavaScript 时,我尝试了相同的方法:首先,打开一个 Excel-ActiveX 对象(当然是在 MS-IE 中),它可以访问 Excel 对象模型引用 (http://msdn .microsoft.com/en-us/library/bb149081(v=office.12).aspx) 我可以通过它应用第一种方法,使用名为“ap”的对象中的 CSV 堆栈集:
// 'ap' is a Javascript object holding a table of CSV strings (natural index: 1..n)
var valCell;
var lim = ap.nbChamps; // 'nbChamps'= number of csv columns in 'ap' object
var curLig = 6; // the datas are written to lines 7 and under
for (var j = 1; j <= ap.nbelem; j++) // ap.nbelem= number of lines in 'ap'
{ // lines loop
curLig += 1;
for (var k = 1; k <= lim; k++) // N.B: 'ap' uses natural index: 1 to n and not 0 to n-1
{ // columns loop
valCell = ap.litEnLC(j, k); // 'ap' method reading column k from line j
classeur.ActiveSheet.Cells(curLig, k + 2 ).value = valCell;
}
}
用了那个方法,我又发现了同样的慢: 于是,我想把第二种方法转成javascript,如下:.首先,向“ap”对象添加一个方法,将 CSV 堆栈转换为 Javascript 二维数组.其次,将此二维数组写入“范围”对象,就像我在 Visual Basic 中所做的那样。所以:
// 'zone' is the range. For example: zone= "C7:W17"
var biTab = ap.pcttEnTab(); // converts CSV stack into a 2D-array
classeur.ActiveSheet.Range(zone).value = biTab;
而且,正如预期的那样,速度要快得多,但问题是它并没有真正起作用,因为它没有将二维数组的每个值传输到 Excel 范围的相应单元格,它写入了Excel 范围的每个单元格中的整个 Javascript 二维数组!
所以问题是:如何一次将 Javascript 二维数组写入 Excel 范围?
感谢任何能给我答案的人...
顺便说一句,我正在添加 pcttEnTab 方法,以防万一有人可以用该方法很好地解释我的问题:
this.pcttEnTab = function () // Array (tableau à 2 dimensions)
{ // convertit la pile PCTT en tableau à 2 dimensions
var j, k, s;
var biTab = new Array();
for (k = 0; k < this.nbelem; k++) // create a columns Array for each line
{
biTab[k] = new Array();
}
for (j = 1; j <= this.nbelem; j++) // lines loop (natural index)
{
for (k = 1; k <= this.nbChamps; k++) // columns loop
{
s = this.litEnLC(j, k);
biTab[j - 1][k - 1] = s;
}
}
return biTab
}
最佳答案
您需要将 JavaScript 数组转换为原生数组。一种方法是使用 Dictionary 对象,参见 http://cwestblog.com/2011/10/24/javascript-snippet-array-prototype-tovbarray :
var dict = new ActiveXObject('Scripting.Dictionary');
for (var i=0;i < 5; i++ ) dict.add(i,i);
sheet.cells(1,1).resize(5, 1).value = sheet.application.Transpose(dict.items());
如果您写入一行,请省略 Transpose()。
关于Javascript 到 Excel : bad performance for lack of "range" method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508582/
我有以下功能: tempFunc :: Int-> Int-> Int tempFunc x y | y == 0 = 0 | x `mod` y == 0 = y + tempFun
当我将 pgAdmin III 连接到 Herkou 上的 PostgreSQL 时,它说:“服务器缺少检测功能......” 如何在 Heroku 上安装这些功能 - 在一个像黑盒子一样的服务器上?
好吧,我真的被困在这个问题上了。 我有 dirs.txt 如下: /var/tmp/old files.txt /var/tmp/old backups.bak dirs.txt文件由脚本自己生成。
我的 Web 应用程序有问题:在我的管理 bean 中: private boolean isUserInDB() { List users = userFacade.findByLogin
我的 AppWidgetProvider(当然是 BroadcastReceiver)已注册接收 CONNECTIVITY_CHANGE,以便我可以尽快更新小部件网络已恢复(尽管仅在需要时,即如果由于
我的页面只包含以下 HTML 代码: Back Test Test 当我尝试 validate it 时为什么会收到
我创建了一段代码: intToDigit :: Char -> Int ord :: Char -> Int intToDigit c = ord c - ord 'a' 但是,当我运行它时,我收到以
我正在尝试实现查看屏幕截图。当我运行我的代码时,我遇到了一些错误并且捕获失败。 这是我的代码: func saveSelfAsImage() { self.lockFocus() le
我在评论Why should I always enable compiler warnings?并指出 In the embedded world, the warnings that worry
我正在编写一个类来保存图的连接组件的状态,支持动态连接,并且每次删除或添加新边时,我都必须重新计算相邻组件以连接或拆分它们。 这些方法唯一可以抛出的异常是 std::bad_alloc .我的任何依赖
我有以下接口(interface)和类型(所有这些都可以更改) interface Base { type: string; } interface A extends Base {
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在使用 as3httpclientlib 将数据发布到我的网络服务,但我一直获得以下安全违规。有谁知道如何解决这个问题?我的 crossdomain.xml 文件位于安全违规通知下方。 注意:我正
我有一个带有一些返回Task的函数的接口(interface)。一些实现该接口(interface)的类没有任何等待的内容,而其他类可能只是抛出异常 - 因此这些警告是虚假且烦人的。 是否可以抑制这些
我从 sccanf() 收到这个警告: ../../../../ext/oedipus/oedipus.c:211: warning: conversion lacks type at end of
我正在使用 jest 对 firestore 执行集成测试。我期望收到包含等于 field1 和 field2 的字段的文档。但是,我收到了以下错误。 我尝试在 firecase 控制台中创建复合索引
我从 sccanf() 收到这个警告: ../../../../ext/oedipus/oedipus.c:211: warning: conversion lacks type at end of
SonarQube 有一个规则,允许您验证每个文件是否有版权和/或许可证。但是,我不确定如何使用可变年份指定版权。 例如,这是他们的合规解决方案: /* * SonarQube, open sour
我有一个单元测试来检查 null 参数。测试方法是这样的: [TestMethod] public async Task Test_NullParam() { Mock mockAuth =
首先:我可能只是犯了一个愚蠢的错误。 我正在将我的一个旧项目从 Spring XML 转换为 Javaconfig。该数据库是内存中的 HSQLDB 数据库。不幸的是,它给了我这个错误: org.hi
我是一名优秀的程序员,十分优秀!