二进制数据如何保存到excel文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制数据如何保存到excel文件中相关的知识,希望对你有一定的参考价值。
原来excel格式的文件以二进制的形式保存到数据库中,
现在要读出来保存到新键的excel文件中
有没有这部分的代码呢?
谢谢
1、没办法,我们是读别人的数据
2、类似于
BufferedOutputStream m_o = new BufferedOutputStream(
new FileOutputStream(file));
m_o.write(byte m_b[]);
这样的代码
3、目前的情况是:二进制数据我已经读到了,保存在byte m_b[] 中
excel里面本来就有这种函数的:
HEX2BIN(number,places)
函数用不了,那就这样吧:
AB列中输入
48 0000
49 0001
50 0010
51 0011
52 0100
53 0101
54 0110
55 0111
56 1000
57 1001
65 1010
66 1011
67 1100
68 1101
69 1110
70 1111
你的十六进制数在C列,D1输入公式:
=VALUE(TEXT(VLOOKUP(CODE(MID(C1,1,1)),A$1:B$16,2),"0000")&TEXT(VLOOKUP(CODE(MID(C1,2,1)),A$1:B$16,2,FALSE),"0000"))
并将单元格数字格式设置为“0000 0000”,然后往下复制公式。
结果为:
AC 1010 1100
92 1001 0010
C7 1100 0111
FB 1111 1011
84 1000 0100
EB 1110 1011
EF 1110 1111
DB 1101 1011
F7 1111 0111
23 0010 0011
12 0001 0010
参考技术A 二进制文件 打开二进制文件的语法格式如下:Open pathname For Binary As [#]filenumber
说明: (1) 参数filename 和filenumber 分别表示文件名或文件号. (2)关键字Binary 表示打开的是二进制文件 (3)对于二进制文件,不能指定字节长度.每个打开的二进制文件都有一个自己的指针,文件指针是一个数字值,指向下一次读写操作的文件中的位置.二进制文件中的每个”位置”对应一个数据字节,因此,有n个字节的文件,就有1到n个位置. 我们可以用Seek()函数返回当前的文件指针位置(即下一个要读写的字节 );用Loc()函数返回上一次读写的字节位置,除非用Seek语句移动了指针,Loc()返回值总比Seek()的小1.我们来看下面的例子:
Open “student.txt” for Binary as #1
该语句用二进制的方式打开了student.txt文件.
你试试看 参考技术B 你的意思是要把二进制代码反向转换成原来的excel文件?你是一下把你读出来的数据保存在一个扩展名为xlsb的文件里面,然后用excel去打开试一下,不过我想不行。但是我也没有更好的方法。 参考技术C 将单元各设置为文本 参考技术D 以下代码,在我的mysql数据库中测试通过~
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* MySQL建表语句:create table test (id int primary key,xls blob)
*
*/
public class test
static
try
Class.forName("com.mysql.jdbc.Driver");
catch (ClassNotFoundException e)
e.printStackTrace();
public static void main(String[] args) throws Exception
test t = new test();
t.insertXLS2DB(new File("D:\\test.xls"));
t.readXLSFromDB(new File("D:\\test2.xls"));
public void insertXLS2DB(File file) throws Exception
FileInputStream fis = null;
Connection con = null;
PreparedStatement ps = null;
try
fis = new FileInputStream(file);
con = getConnection();
con.setAutoCommit(false);
ps = con.prepareStatement("insert into test values(?,?)");
ps.setInt(1, 3);
ps.setBinaryStream(2,fis,fis.available());
ps.executeUpdate();
con.commit();
catch (Exception e)
if(con!=null)
con.rollback();
throw e;
finally
releaseResource(fis,ps,con);
public void readXLSFromDB(File f) throws Exception
InputStream is = null;
FileOutputStream fos = null;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
con = getConnection();
con.setAutoCommit(false);
ps = con.prepareStatement("select xls from test where id = ?");
ps.setInt(1, 3);
rs = ps.executeQuery();
if(!f.exists())
f.createNewFile();
fos = new FileOutputStream(f);
while(rs.next())
is = rs.getBinaryStream("xls");
con.commit();
byte[] bytes = new byte[1024];
int len = 0;
while((len=is.read(bytes))!=-1)
fos.write(bytes, 0, len);
fos.flush();
catch(Exception e)
if(con!=null)
con.rollback();
throw e;
finally
releaseResource(is,fos,ps,con);
public Connection getConnection() throws SQLException
return DriverManager.getConnection("jdbc:mysql://localhost:3306/pm?useUnicode=true&characterEncoding=UTF-8","root","gg");
public void releaseResource(Object... objs) throws IOException, SQLException
for(Object obj:objs)
if(obj!=null)
if(obj instanceof Closeable)
((Closeable) obj).close();
else if(obj instanceof Connection)
((Connection) obj).close();
else if(obj instanceof Statement)
((Statement) obj).close();
本回答被提问者采纳
如何将 json 从 dash dcc.Store 保存到 excel 文件?
【中文标题】如何将 json 从 dash dcc.Store 保存到 excel 文件?【英文标题】:How to save json from dash dcc.Store to excel file? 【发布时间】:2022-01-01 03:47:32 【问题描述】:我正在尝试将用户输入存储在 dcc.store 中,然后使用 store 中的数据保存在 excel 文件中,但是将数据保存到 excel 的回调不起作用。我这样做是因为我也想在计算中使用用户输入,所以我没有保存并再次读取它,而是将用户输入保存在 dcc.store 中并执行我的计算,但也想将其保存在 excel 中以供将来使用. 我的应用程序有 3 个选项卡,在第一个选项卡中,我正在接受用户输入并尝试保存输入。 任何人都可以在这里帮忙,下面是代码。
` dash_app = 此处的工作代码
tabs = dcc.Tabs(
id="dummy-tabs",
value="tab1",
children=[
dcc.Tab(label="Pricing Inputs", value="tab1"),
dcc.Tab(label="Tab 2", value="tab2"),
dcc.Tab(label="Tab 3", value="tab3"),
],
)
layout = html.Div(
children=[
dcc.Store(id="dummy-input-store"),
tabs,
html.Div(id="tabs-content"),
]
)
@dash_app.callback(Output("tabs-content", "children"), Input("dummy-tabs", "value"))
def tab_content_display(tab):
options2 = ["A","B","C"]
tab1_content = html.Div(
[
html.Label(
"Input1",
htmlFor="input1",
style="margin-right": "2em",
),
dcc.Input(
id="input1",
type="text",
placeholder="input type text",
style=
"width": "40%",
"display": "inline-block",
"verticalAlign": "middle",
,
),
html.Br(),
html.Label(
"Input2",
htmlFor="input2",
style="margin-right": "2em",
),
dcc.Dropdown(
id="input2",
options=["label": i, "value": i for i in options2],
style=
"width": "40%",
"display": "inline-block",
"verticalAlign": "middle",
,
),
html.Br(),
html.Div(
[
html.Button(
id="reset-button",
n_clicks=0,
children="Reset",
style=
"fontWeight": "bold",
"textAlign": "center",
"marginRight": 25,
,
title="Click to clear the inputs",
),
html.Button(
id="submit-button",
n_clicks=0,
children="Submit",
style=
"fontWeight": "bold",
"textAlign": "center",
"marginRight": 25,
,
title="Click to save inputs",
),
]
),
html.Div(id="msg"),
]
)
tab2_content = html.Div([html.P("This is tab 2!")])
tab3_content = html.Div([html.P("This is tab 3!")])
if tab == "tab1":
return tab1_content
elif tab == "tab2":
return tab2_content
elif tab == "tab3":
return tab3_content
@dash_app.callback(
Output("dummy-input-store", "data"),
Input("input1", "value"),
Input("input2", "value"),
)
def store_output_tab1(
input1,
input2,
):
return json.dumps(
"Input1": input1,
"Input2": input2,
)
@dash_app.callback(
Output("dummy-input-store", "clear_data"), Input("reset-button", "n_clicks")
)
def reset_click_tab1(n_click_clear):
if n_click_clear is not None and n_click_clear > 0:
return True
return False
@dash_app.callback(
Output("msg", "children"),
Input("submit-button", "n_clicks"),
State("dummy-input-store", "data"),
)
def print_msg_tab1(n_clicks, data):
if n_clicks is not None and n_clicks > 0:
dummy_inputs = pd.DataFrame.from_dict(data, orient="index")
filepath = r"C:\input_data.xlsx"
with pd.ExcelWriter(filepath, mode = 'a') as writer:
dummy_inputs.to_excel(writer,sheet_name = "Dummy_Inputs")
return html.Div([html.H6(f"Inputs Saved:data")])
raise PreventUpdate
`
【问题讨论】:
【参考方案1】:你去吧,虽然 xlsxwriter 中的 mode='a' 可能不是你想要的......我不知道。
import dash
from dash import html, dcc, Input, Output, State
from dash.exceptions import PreventUpdate
import json
import pandas as pd
dash_app = dash.Dash(__name__)
dash_app.config.suppress_callback_exceptions = True
tabs = dcc.Tabs(
id="dummy-tabs",
value="tab1",
children=[
dcc.Tab(label="Pricing Inputs", value="tab1"),
dcc.Tab(label="Tab 2", value="tab2"),
dcc.Tab(label="Tab 3", value="tab3"),
],
)
layout = html.Div(
children=[
dcc.Store(id="dummy-input-store"),
tabs,
html.Div(id="tabs-content"),
]
)
dash_app.layout = layout
@dash_app.callback(Output("tabs-content", "children"), Input("dummy-tabs", "value"))
def tab_content_display(tab):
options2 = ["A","B","C"]
tab1_content = html.Div(
[
html.Label(
"Input1",
htmlFor="input1",
style="margin-right": "2em",
),
dcc.Input(
id="input1",
type="text",
placeholder="input type text",
style=
"width": "40%",
"display": "inline-block",
"verticalAlign": "middle",
,
),
html.Br(),
html.Label(
"Input2",
htmlFor="input2",
style="margin-right": "2em",
),
dcc.Dropdown(
id="input2",
options=["label": i, "value": i for i in options2],
style=
"width": "40%",
"display": "inline-block",
"verticalAlign": "middle",
,
),
html.Br(),
html.Div(
[
html.Button(
id="reset-button",
n_clicks=0,
children="Reset",
style=
"fontWeight": "bold",
"textAlign": "center",
"marginRight": 25,
,
title="Click to clear the inputs",
),
html.Button(
id="submit-button",
n_clicks=0,
children="Submit",
style=
"fontWeight": "bold",
"textAlign": "center",
"marginRight": 25,
,
title="Click to save inputs",
),
]
),
html.Div(id="msg"),
]
)
tab2_content = html.Div([html.P("This is tab 2!")])
tab3_content = html.Div([html.P("This is tab 3!")])
if tab == "tab1":
return tab1_content
elif tab == "tab2":
return tab2_content
elif tab == "tab3":
return tab3_content
@dash_app.callback(
Output("dummy-input-store", "data"),
Input("input1", "value"),
Input("input2", "value"),
)
def store_output_tab1(
input1,
input2,
):
data =
"Input1": [input1],
"Input2": [input2],
return pd.DataFrame.from_dict(data, orient='index').to_dict('records')
@dash_app.callback(
Output("dummy-input-store", "clear_data"), Input("reset-button", "n_clicks")
)
def reset_click_tab1(n_click_clear):
if n_click_clear is not None and n_click_clear > 0:
return True
return False
@dash_app.callback(
Output("msg", "children"),
Input("submit-button", "n_clicks"),
State("dummy-input-store", "data"),
)
def print_msg_tab1(n_clicks, data):
if n_clicks is not None and n_clicks > 0:
dummy_inputs = pd.DataFrame.from_dict(data)
filepath = r"C:\input_data.xlsx"
try:
with pd.ExcelWriter(filepath, engine="openpyxl", mode="a") as writer:
dummy_inputs.to_excel(writer, sheet_name = "Dummy_Inputs")
except FileNotFoundError:
dummy_inputs.to_excel(filepath, sheet_name = "Dummy_Inputs")
return html.Div([html.H6(f"Inputs Saved:data")])
raise PreventUpdate
if __name__ == '__main__':
dash_app.run_server(debug=True)
【讨论】:
感谢您指出问题出在 excel writer 而不是破折号。您的建议是为每个新条目创建一个新标签。所以我决定使用 csv 模块中的 Dictwriter 并将我的数据保存在 csv 文件中。以上是关于二进制数据如何保存到excel文件中的主要内容,如果未能解决你的问题,请参考以下文章