如何使用POI处理旧的excel .xls文件?

由于POI有更多的function,我从jxl切换到poi。 但是,我无法处理以旧格式生成的xls文件。 现在我得到这个错误: org.apache.poi.hssf.OldExcelFormatException:提供的电子表格似乎是Excel 5.0 / 7.0(BIFF5)格式。 POI仅支持BIFF8格式(从Excel版本97/2000 / XP / 2003) 现在我正在考虑使用两个JXL以及POI,这取决于xls版本,因此对于旧格式的xls文件,我将使用jxl,而对于新版本,我将使用POI。 这是一个很好的解决scheme? 有没有其他的select?

在Excel中导入Json

此链接上的代码将JSON导入Google文档电子表格工作簿https://github.com/fastfedora/google-docs/blob/master/scripts/ImportJSON/Code.gs 。 有什么相当于Excel的,所以我可以从网站上获得JSON的某些值? 它需要是XML吗?

Excel VBA:范围到string数组在1步

我知道你可以很容易地获取一系列的单元格,并将它们放入一个Variant数组中,但是我想使用一个string数组(因为它是单维的,并且占用的内存比Variant数组less)。 有没有办法自动将范围转换为string数组? 现在,我正在使用一个函数,它将采用范围并将值保存在variables数组中,然后将variables数组转换为string数组。 它工作得很好,但我正在寻找一种方式直接从范围到string数组。 任何帮助将不胜感激。 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 更新:这看起来像没有办法跳过将数据转换为一维string数组之前,将数据放入一个variables数组的步骤。 如果是真的,那真可惜(即使不需要太多的努力,我也喜欢超优化,所以我希望有一种方法可以跳过这一步)。 如果没有解决办法,我会在几天内解决这个问题。 感谢有用的评论,伙计! 更新2:回答西蒙谁付出了很大的努力(所有其他人也一样),并指出从一个镜头范围到string排列确实是不可能的。 感谢大家。

如何知道Process.Start()是否成功?

我已经尝试了两种不同的方法来启动一个进程。 首先 定义被定义为Start方法的参数: System.Diagnostics.Process.Start("excel", string.Format("\"{0}\"", ExcelFileBox.Text.ToString())); 我的想法: 这个开始很好,但我不知道如何从中得到反馈。 第二 我开始研究ProcessStartInfo是因为我想知道Excel是否成功启动 – 例如,虽然它很可能存在于用户的机器上,但是不能保证,并且向用户指示它已启动是愚蠢的没有成功的时候。 System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo { FileName = "excel", Arguments = string.Format("\"{0}\"", ExcelFileBox.Text.ToString()), ErrorDialog = true, UseShellExecute = false, WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) }; try { System.Diagnostics.Process.Start(startinfo); } catch (Exception err) { Console.WriteLine(err.Message); } 我的想法: 这给出了错误:“系统找不到指定的文件”,但不清楚它是指Excel应用程序还是我的文件。 无论如何,虽然我很欣赏错误信息的能力,但我现在不应该接受。 想法,build议,想法如何知道这是否成功? 解决了 我把启动一个进程的第一种方式变成了一个try-catch,它运行的很好。

OnClick在Excel VBA中

有没有办法在Excel中用VBA捕捉单元格? 我不是指Worksheet_SelectionChange事件,因为如果多次单击单元格,将不会触发多次。 BeforeDoubleClick也无法解决我的问题,因为我不想要求用户双击那个顺序。 我目前的解决scheme与SelectionChange事件一起工作,但似乎需要使用全局variables和其他次优编码实践。 这似乎也容易出错。

即使Excel不精确,Excel如何成功地轮询浮动数字?

例如, 这个博客说0.005不是完全是0.005,而是四舍五入得出正确的结果。 我在我的C ++中尝试了各种Round,并且我没有将舍入数字舍去到某些小数位。 例如,Round(x,y)将x舍入为y的倍数。 所以轮(37.785,0.01)应该给你37.79而不是37.78。 我正在重新提出这个问题,要求社区寻求帮助。 问题在于浮点数的不精确性(37,785表示为37.78499999999)。 问题是Excel如何解决这个问题? 在这一轮的解决scheme()在C + +的浮动是不正确的上述问题。

简单的VBA代码给我运行时错误91对象variables或块未设置

所以当我点击一个命令button时,我有一个简单的macros/子定义。 问题是这给了我: 运行时错误“91”:对象variables或未设置块 我的代码是: Dim rng As Range rng = Sheet8.Range("A12") '<< ERROR here rng.Value2 = "1" 我只想在Sheet8中设置Cell“A12”。 谢谢!

如何从XLS文件中获取图表名称而不加载整个文件?

我目前使用pandas来读取一个Excel文件,并向用户展示它的表名,以便他可以select他想使用的表格。 问题是这些文件真的很大(70列x 65k行),最多需要14s才能加载到笔记本上(CSV文件中的相同数据需要3s)。 我在pandas的代码是这样的: xls = pandas.ExcelFile(path) sheets = xls.sheet_names 我以前试过xlrd,但是获得了类似的结果。 这是我的代码与xlrd: xls = xlrd.open_workbook(path) sheets = xls.sheet_names 那么,有没有人可以build议一个更快的方式来从Excel文件检索表名称比读取整个文件?

使用VBA在Excel单元格中编写公式

我正在尝试使用VBA将公式写入Excel中的单元格。 我的问题是,当我在公式中使用分号( ; )时,出现错误: Error 1004 我的macros是以下内容: Sub Jours_ouvres() Dim Feuille_Document As String Feuille_Document = "DOCUMENT" Application.Worksheets(Feuille_Document).Range("F2").Formula = "=SUM(D2;E2)" End Sub

VBA复制工作表到工作簿结尾(带有隐藏的工作表)

我想复制一张纸并将其添加到当前所有纸张的末尾(不pipe纸张是否隐藏)。 Sheets(1).Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).name = "copied sheet!" 这工作正常,除了有隐藏的工作表时,新工作表只插入最后一个可见的工作表之后,所以name命令重命名错误的工作表。 我已经尝试了以下变体以获取对新复制的WorkSheet的引用,但没有一个是成功的和/或有效的代码。 Dim test As Worksheet Set test = Sheets(1).Copy(After:=Sheets(Sheets.Count)) test.Name = "copied sheet!"