一页纸
type: channel
link: https://blog.913333.xyz/
description: Your description here.
items: 库区排序
items: WPS常用代码
items: 常用网站
items: wps脚本
items: 【保姆级教程】利用宝塔面板+Docker搭建一个优秀的密码管理器——Bitwarden
items: minio
items: 小袁口算脚本
items: Handsome美化
items: 解决*unicode*编码中文乱码问题
items: ddddocr库使用

库区排序
type: item
date: 2025-05-07T11:30:47+08:00
description: A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 冷藏库 添加剂库 2A 2A1 2A2 2A3 2A4 2B1 2B2 2B3 2B4 2C1 2C2 2D1 2D2 2E1 2E2 2E3 2E4 2E5 5楼 5A1 5A2 5A3 5A4 5A5 5A6 2B1 5C1 0

WPS常用代码
type: item
date: 2025-05-06T14:07:00+08:00
description: 原料计算数量=D2*EVALUATE(SUBSTITUTE(SUBSTITUTE(C2,"kg",""),"L",""))+E2查询原料箱数=VLOOKUP(B2,[三香原物料库存202508.xlsx]原料!$C:$H,6,0)/PRODUCT(--TEXTSPLIT(SUBSTITUTE(SUBSTITUTE(C2,"kg",""),"L",""),"*"))查询库区=XLOOKUP(B2,原料!$C:$C,原料!$B:$B,XLOOKUP(B2,包装!C:C,包装!B:B,0,0,1),0,1)查询规格=XLOOKUP(B2,原料!$C:$C,原料!$D:$D,XLOOKUP(B2,包装!$C:$C,包装!$D:$D,0,0,1),0,1)库存单位=IFERROR(VLOOKUP(B2,包装!$C:$E,3,0),0)结存数量=XLOOKUP(B2,原料!$C:$C,原料!$H:$H,XLOOKUP(B2,包装!$C:$C,包装!$J:$J,0,0,1),0,1)结存数量对比=H2-G2应当结余=XLOOKUP(B2,原料!$C:$C,原料!$E:$E,XLOOKUP(B2,包装!$C:$C,包装!$F:$F,0,0,1),0,1)-I2初期结余日盘=XLOOKUP(B2,原料!$C:$C,原料!$E:$E,XLOOKUP(B2,包装!$C:$C,包装!$F:$F,0,0,1),0,1)

常用网站
type: item
date: 2025-05-06T13:01:00+08:00
description: kimi

wps脚本
type: item
date: 2025-05-04T20:57:00+08:00
description: function demo1() { var sheet = Application.ActiveSheet; var selection = Application.Selection; // 出库粘贴 - 多选批量操作版本 var sheetName = sheet.Name; if (sheetName !== "出库") { MsgBox("当前工作表不是【出库】表，请切换到正确的工作表！"); return; // 直接退出函数 } try { // 检查是否选中了单元格 if (selection.Count === 0) { alert("请选择至少一个单元格"); return; } // 获取所有选中单元格 var selectedCells = []; var areas = selection.Areas; for (var a = 1; a <= areas.Count; a++) { var area = areas.Item(a); for (var i = 1; i <= area.Count; i++) { selectedCells.push(area.Item(i)); } } // 用于记录处理结果 var successCount = 0; var failCount = 0; var failMessages = []; // 处理每个选中的单元格 for (var s = 0; s < selectedCells.length; s++) { var targetCell = selectedCells[s]; var targetRow = targetCell.Row; try { // 获取同行第二列(B列)的内容 var searchKey = sheet.Cells.Item(targetRow, 2).Text; // 2表示B列 // 检查搜索内容是否有效 if (searchKey === null || searchKey === "") { failCount++; failMessages.push("行" + targetRow + ": B列单元格没有内容"); continue; } // 初始化变量 var foundCell = null; var closestDistance = Infinity; // 从当前行-1开始向上搜索B列（行号-1到第1行） for (var row = targetRow - 1; row >= 1; row--) { var cell = sheet.Cells.Item(row, 2); // 始终搜索B列 if (cell.Text == searchKey) { // 计算与当前行的距离 var distance = targetRow - row; if (distance < closestDistance) { closestDistance = distance; foundCell = cell; } } } // 如果找到匹配项 if (foundCell != null) { // 获取同行的第7列(G列)的值 var resultCell = sheet.Cells.Item(foundCell.Row, 7); // 7表示G列 targetCell.Formula = resultCell.Text; successCount++; } else { failCount++; failMessages.push("行" + targetRow + ": 未在B列上方找到与 '" + searchKey + "' 匹配的单元格"); } } catch (e) { failCount++; failMessages.push("行" + targetRow + ": 处理错误 - " + e.message); } } // 显示处理结果摘要 var resultMessage = "处理完成:\n"; resultMessage += "成功: " + successCount + " 个\n"; resultMessage += "失败: " + failCount + " 个"; if (failCount > 0) { resultMessage += "\n\n失败详情:\n" + failMessages.join("\n"); } alert(resultMessage); } catch (e) { alert("发生错误: " + e.message); } } function demo2() { // 入库粘贴 - 多选批量操作版本 var sheet = Applic…

【保姆级教程】利用宝塔面板+Docker搭建一个优秀的密码管理器——Bitwarden
type: item
date: 2024-10-13T21:21:30+08:00
description: 更新 最新搭建方法更加简单，详情请见：https://blog.laoda.de/archives/docker-compose-install-vaultwarden 正文 Bitwarden 是一款开源密码管理器，它会将所有密码加密存储在服务器上，它的工作方式与 LastPass、1Password 或 Dashlane 相同。 官方的版本搭建对服务器要求很高，搭建不容易，GitHub上有人用 Rust 实现了 Bitwarden 服务器，项目叫 vaultwarden，并且提供了 Docker 镜像，这个实现更进一步降低了对机器配置的要求，并且 Docker 镜像体积很小，部署非常方便。这个项目目前在GitHub也有9.8k的star，非常受欢迎。 此外，官方服务器中需要付费订阅的一些功能，在这个实现中是免费的。 这篇文章就利用宝塔面板来docker搭建Bitwarden。 视频 一：简介 项目：https://github.com/dani-garcia/vaultwarden 二：要求 aapanel 6.8.13 （宝塔海外版） 一个解析好的域名 腾讯轻量云香港服务器 （演示系统：Debian 10） 三：部署 aapanel安装 官方地址：https://forum.aapanel.com/d/9-aapanel-linux-panel-6812-installation-tutorial Centos : yum install -y wget && wget -O install.sh http://www.aapanel.com/script/install_6.0_en.sh && bash install.sh Ubuntu/Deepin : wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh Debian : wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh Docker安装 官方地址：https://docs.docker.com/engine/install/debian/ sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io sudo docker run hello-world systemctl enable docker #设置docker开机自动启动 systemctl status docker #查看docker状态 正式部署 用Docker来部署，两行命令就够了，命令如下： docker run -d --name bitwardenrs \ --restart unless-stopped \ -e WEBSOCKET_ENABLED=true \ -v /www/wwwroot/demo/:/data/ \ -p 6666:80 \ -p 3012:3012 \ vaultwarden/server:latest 注意：/www/wwwroot/demo/ 请修为自己的路径 安装截图，如下： 四：设置反向代理 上面的设置好之后，我们还需要设置反向代理才可以打开网站，但是在设置之前，我们需要新建一个站点，并且设置好SSL证书。这些还是用宝塔面板来操作。我们需要把http://127.0.0.1:6666设置反向代理，如图： …

minio
type: item
date: 2024-10-13T21:15:38+08:00
description: minio一、使用docker部署minio1、拉取镜像docker pull minio/minio 2、创建目录mkdir -p /home/minio/config mkdir -p /home/minio/data 3、创建Minio容器并运行docker run -p 9002:9002 -p 9001:9001 \ --net=host \ --name minio \ -d --restart=always \ -e "MINIO_ACCESS_KEY=admin" \ -e "MINIO_SECRET_KEY=zhou1409573580" \ -v /home/minio/data:/data \ -v /home/minio/config:/root/.minio \ minio/minio server \ /data --console-address ":9001" -address ":9002"

小袁口算脚本
type: item
date: 2024-10-11T14:26:52+08:00
description: 小袁口算脚本抓包代码import re import time import sys import threading import argparse import adbutils from mitmproxy import http from mitmproxy.tools.main import mitmdump auto_jump = True # 拦截 HTTP 响应，检查 URL 并逐个字段替换 def response(flow: http.HTTPFlow): # 匹配目标 URL url_pattern = re.compile(r"https?://xyks\.yuanfudao\.com/leo-game-pk/(iphone|android)/math/pk/match.+") # 如果 URL 匹配 if url_pattern.match(flow.request.url): # 如果响应类型是 JSON if "application/json" in flow.response.headers.get("Content-Type", ""): # 读取原始响应体 response_text = flow.response.text # 使用正则表达式逐个替换字段 response_text = re.sub(r'"answer":"[^"]+"', '"answer":"1"', response_text) response_text = re.sub(r'"answers":\[[^\]]+\]', '"answers":["1"]', response_text) # 更新修改后的响应体 flow.response.text = response_text threading.Thread(target=answer_write, args=(len(re.findall(r'answers', flow.response.text)),)).start() # 检测提交 if auto_jump and re.compile(r"https?://xyks\.yuanfudao\.com/leo-game-pk/(iphone|android)/math/pk/submit.+").match(flow.request.url): threading.Thread(target=jump_to_next).start() def jump_to_next(): # 结束，自动进下一局 device = adbutils.adb.device() time.sleep(3) command = "input tap 540 1520" device.shell(command) # “开心收下”按钮的坐标 time.sleep(0.3) command = "input tap 780 1820" device.shell(command) # “继续”按钮的坐标 time.sleep(0.3) command = "input tap 510 1700" device.shell(command) # “继续PK”按钮的坐标 def swipe_screen(): xy = [[1310, 540], [1410, 560]] command = f"input swipe {xy[0][1]} {xy[0][0]} {xy[1][1]} {xy[1][0]} 0" device = adbutils.adb.device() device.shell(command) def answer_write(answer): time.sleep(13) for _ in range(answer): swipe_screen() time.sleep(0.01) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Mitmproxy script") parser.add_argument("-P", "--port", type=int, default=8080, help="Port to listen on") parser.add_argument("-H", "--host", type=str, default="0.0.0.0", help="Host to listen on") args = parser.parse_args() sys.argv = ["mitmdump", "-s", __file__, "--listen-host", args.host, "--lis…

Handsome美化
type: item
date: 2024-10-09T18:06:49+08:00
description: Handsome美化美化记录自定义CSS该修改项位于Handsome主题后台-外观-设置外观-开发者设置-自定义CSS​文章顶部内容居中文章顶部内容居中header.bg-light.lter.wrapper-md { text-align: center; } 首页文章标题居中首页文章标题居中.post_title_wrapper { justify-content: center; } 首页文章日期居中首页文章日期居中.text-muted.post-item-foot-icon.text-ellipsis.list-inline { text-align: center; background-color: #fff; } 标签字体颜色标签字体颜色.badge,.padder-v-ssm{ color:#fff; } 赞赏按钮跳动赞赏按钮跳动/*赞赏按钮跳动*/ .btn-pay { animation: star 0.5s ease-in-out infinite alternate; } @keyframes star { from { transform: scale(1); } to { transform: scale(1.1); } } 标题悬停颜色标题悬停颜色.index-post-title a:hover { color: #2ebaae; } 全站页面纯白全站页面使用白色时，需要在后台设置-外观设置-主题色调自定义搭配​修改为white-white-white​全站页面纯白/*白色整体背景*/ div#alllayout { background-color: #fff; } .night div#alllayout { background-color: #1d1f20; } /*左侧-顶部-底部*/ .bg-white{ background-color: #fff; } /*页面底部*/ .bg-light { background-color: #fff; } /*首页标题背景变白*/ .bg-light .lter, .bg-light.lter { background-color: #fff; } /* 右侧背景 */ .bg-white-only{ background-color:#fff; } /*文章页面变白*/ #post-panel { background: white; } /*登录后前台头像下变白*/ li.wrapper.b-b.m-b-sm.bg-light.m-t-n-xs { background-color: #fff; } 局部阴影局部阴影/*博客信息-搜索框-幻灯片 阴影*/ .box-shadow-wrap-normal { box-shadow: 0 0px 4px rgba(0, 0, 0, 0.16); } /*盒子四周阴影*/ .app.container { box-shadow: 0 0 20px rgba(0, 0, 0, 0.16)!important; } /*文章圆角-阴影*/ .panel { box-shadow: 0 0px 2px 2px rgba(0, 0, 0, .13); border-radius: 6px!important; } /*文章标题阴影*/ .bg-white-pure { background: white; box-shadow: 0 0px 2px 2px rgba(0, 0, 0, .13); } 获取焦点放大首页文章图片获取焦点放大/*首页文章图片获取焦点放大*/ .item-thumb { cursor: pointer; transition: all .6s; } .item-thumb:hover { transform: scale(1.05); } 文章悬浮效果文章悬浮效果/* 文章悬浮效果 */ .blog-post .panel:not(article){transition:all .3s} .blog-post .panel:not(article):hover{transform:translateY(-10px)} 滚动条效果滚动条效果/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width:9px; height:8px; } /*定义滚动条轨道*/ ::-webkit-scrollbar-track { background-color:white; -webkit-border-radius: 0em; -moz-border-radius: 0em; border-radius: 0em; } /*定义滑块…

解决*unicode*编码中文乱码问题
type: item
date: 2024-10-06T18:05:07+08:00
description: 解决unicode编码中文乱码问题 import re content = "\\u002F哈哈" content = re.sub(r'(\\u[\s\S]{4})',lambda x:x.group(1).encode("utf-8").decode("unicode-escape"),content) ==> /哈哈 代码 def processing_content(self, content): """处理 正文 unicode 问题""" content = str(content).replace('\\\"', '"').replace('\\n', '').replace('\\r', '').replace('\\t', '') content = re.sub(r'(\\u[\s\S]{4})', lambda x: x.group(1).encode("utf-8").decode("unicode-escape"), content) return content ‍

ddddocr库使用
type: item
date: 2024-10-06T18:04:29+08:00
description: ddddocr库使用#import ddddocr def get_code(url): """ 获取验证码 """ yzm = request.get(url).content ocr = ddddocr.DdddOcr(show_ad = False) res = ocr.classification(yzm) return res 识别base64图片def get_img_code(base64_data): image_data = base64.b64decode(base64_data) with open('1.png', 'wb') as f: f.write(image_data) ocr = ddddocr.DdddOcr(show_ad=False) img_code = ocr.classification(image_data) img_code = get_code_result(img_code) logger.info('验证码：' + str(img_code)) return img_code