由于Excel 2007中,微软已经分裂的经典.xls
格式的多种格式(特别是.xlsx
,.xlsm
,.xlsb
).我理解.xlsx
格式的用途和目的没有问题,但我仍然想知道在创建包含某个VBA的文件时是否应该使用a .xlsm
或.xlsb
格式.
当然,您可以在网上找到一些主题,例如:
.xlsb
)我从最后一个链接中理解的是,这.xlsm
是某种XML格式,因此需要自定义功能区选项卡.
除了格式之间的概念差异(.xlsm
基于XML VS .xlsb
是二进制文件),使用任何此文件时是否有任何实际差异(除了功能区自定义)?
你有没有看到使用这些格式的任何真正的区别?
我正在尝试在R中打开一个.xlsb文件并继续收到类似的错误.
有关如何解决此问题而不必下载数据并将其保存在不同的格式中的任何建议?
read.xlsx(paste(OutputLocation,FileName, sep=""), sheetName = "Master Data")
Run Code Online (Sandbox Code Playgroud)
错误消息: .jcall中的错误("RJavaTools","Ljava/lang/Object;","invokeMethod",cl,:org.apache.poi.xssf.XLSBUnsupportedException:.XLSB二进制工作簿不受支持
rigDataWB<-loadWorkbook(paste(OutputLocation,FileName, sep=""))
Run Code Online (Sandbox Code Playgroud)
错误消息: 错误:XLSBUnsupportedException(Java):. XLSB不支持二进制工作簿
请注意:
我无法安装Perl库.
我正在运行64位R.
参考: http ://www.milanor.net/blog/?p = 779
我的数据来自: http ://phx.corporate-ir.net/phoenix.zhtml?c = 79787&p = irol-reportsother
我已经提供了一个充满数据的xlsb文件.我想使用python处理数据.我可以使用excel或open office将其转换为csv,但我希望整个过程更加自动化.有任何想法吗?
更新:我看了这个问题并使用了第一个答案:
import subprocess
subprocess.call("cscript XlsToCsv.vbs data.xlsb data.csv", shell=False)
Run Code Online (Sandbox Code Playgroud)
问题是文件包含希腊字母,因此不保留编码.使用Notepad ++打开csv看起来应该是这样,但是当我尝试插入数据库时就像这样 .将文件作为csv打开,只是为了读取文本,如下所示:\ xc2\xc5\xcb而不是ΒΕΛ.
我意识到这是编码中的一个问题,但是有可能保留将xlsb文件转换为csv的原始编码吗?
我正在开发一个使用Apache POI读取excel xlsb文件的Java应用程序,但是在读取它时遇到异常,我的代码如下:
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.xssf.eventusermodel.XSSFReader;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.Package;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import java.util.Iterator;
public class Prueba {
public static void main (String [] args){
String direccion = "C:/Documents and Settings/RSalasL/My Documents/New Folder/masstigeoct12.xlsb";
Package pkg;
try {
pkg = Package.open(direccion);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
XMLReader parser = fetchSheetParser(sst);
Iterator<InputStream> sheets = r.getSheetsData();
while(sheets.hasNext()) { …
Run Code Online (Sandbox Code Playgroud) 我正在使用POI 3.9从xlsx读取数据.但是现在我遇到了一个问题,POI不支持xlsb文件,我需要从程序上读取xlsb中的数据.有人知道如何从程序上读取xlsb中的数据吗?赞赏.
我有这段代码,我想将.xlsb
文件转换为DataTable
public static class Utils
{
public static DataTable ImportExceltoDatatable(string filepath)
{
string connectionString = "Driver ={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; DBQ = " + filepath;
string query = "Select * From [SheetName$]";
using (var connection = new OdbcConnection(connectionString))
using (var adapter = new OdbcDataAdapter(query, connection))
{
DataSet dataset = new DataSet();
adapter.Fill(dataset); // <---------------- exception thrown here
DataTable datatable = dataset.Tables[0];
return datatable;
};
}
}
Run Code Online (Sandbox Code Playgroud)
adapter.Fill(datasaet)
抛出以下异常
System.Data.Odbc.OdbcException:“错误 [IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序”
在计算机ODBC设置中,似乎安装了Excel驱动程序 …
我试图从xlsb工作簿中读取数据框的范围.我可以用xlsx
R中的包来做这个吗?如果没有,有没有人知道这样做的方法?
我正在尝试将*.xlsb
文件转换为php array
或*.csv
文件(或至少*.xls
)。我尝试使用PHPExcel
,但它似乎无法识别此文件中的内容。
我注意到,您可以将*.xlsb
文件重命名为*.zip
文件,然后使用命令行解压缩它unzip *.zip
。在此之后,您将获得下一个包含sheet1.bin
文件的文件夹:
看起来这个文件应该包含 Excel 单元格值,但我仍然无法使用PHPExcel
. 有人可以帮我解析*.xlsb
文件并从中获取信息吗?或者也许可以解析这个sheet1.bin
文件?
我使用libreoffice将.xlsb(新的Excel二进制格式)文件转换为.xls(旧的Excel格式),以便用其他需要.xls的代码解析它们.以下命令行通常有效:
libreoffice --headless --invisible --convert-to xls f.xlsb
这会写一个输出文件f.xls
.我已经成功使用了一段时间(从代码驱动,所以不是我忘记了正确的命令行).
但现在我发现该命令似乎有效,但该文件f.xls
根本不是Excel格式,而是OpenDocument电子表格(LibreOffice的原生格式).某些东西导致程序忽略指定的目标格式.
这是在Fedora 20上使用Fedora提供的libreoffice软件包.什么可以改变打破它?
我已经阅读了一个 .xlsb 文件并使用以下代码解析了日期列:
dateparser = lambda x: pd.to_datetime(x)
data = pd.read_excel(r"test.xlsb", engine="pyxlsb",
parse_dates=["start_date","end_date"],
date_parser=dateparser
)
Run Code Online (Sandbox Code Playgroud)
我在 .xlsb 文件中的输入列的格式为DD/MM/YYYY(例如 26/01/2008)。作为我得到的上述代码的输出,例如:1970-01-01 00:00:00.000038840。只有最后 5 位数字会发生变化。
如果我在不解析日期的情况下读取同一个文件,则相同的列是 float64 类型并且只包含之前输出的最后 5 位数字(例如38840.0)。
我认为这是与日期编码本身相关的问题。有谁知道如何解决这个问题?
xlsb ×10
excel ×5
java ×2
python ×2
r ×2
apache-poi ×1
c# ×1
csv ×1
date-parsing ×1
datetime ×1
excel-2007 ×1
libreoffice ×1
odbc ×1
pandas ×1
perl ×1
php ×1
phpexcel ×1
sax ×1
xls ×1
xlsm ×1