当前位置: 首页 > 编程日记 > 正文

C#操作excel(多种方法比较)

我们在做excel资料的时候,通常有以下方法。

一.导入导出excel常用方法:

1.用查询表的方式查询并show在数据集控件上。

ContractedBlock.gifExpandedBlockStart.gif代码
public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =C:\\08.xls;Extended Properties=Excel 8.0";
public static DataSet ds;
protected void Page_Load(object sender, EventArgs e)
{

OleDbConnection conn
= new OleDbConnection(strCon);
string sql = "select * from [Sheet1$]";
conn.Open();
OleDbDataAdapter myCommand
= new OleDbDataAdapter(sql, strCon);
ds
= new DataSet();
myCommand.Fill(ds,
"[Sheet1$]");
conn.Close();
datagrid1.DataMember
= "[Sheet1$]";
datagrid1.DataSource
= ds;
datagrid1.DataBind();


//Excel.Application excel = new Excel.Application();
//excel.Application.Workbooks.Add(true);
//excel.Visible = true;
}

2.一个一个单元格的进行插入

ContractedBlock.gifExpandedBlockStart.gif代码
1 string str = @"Data Source=IT-428E4EA4B0C7\SQLEXPRESS;Initial Catalog=TestBase;Integrated Security=True";
2 SqlConnection conn = new SqlConnection(str);
3 conn.Open();
4 int n = 0;
5 for (int i = 1; i < 20; i++)
6 {
7 if (n > 3)
8 break;
9 else
10 if (msheet.Cells.get_Range("A" + i, Type.Missing).Text.ToString() == "" && n <= 3)
11 { n++; }
12 else
13 {
14  //循环获取excel单元格的值一次一次的插入,excuteSql为执行的存储过程
15   excuteSql(msheet.Cells.get_Range("B" + i, Type.Missing).Text.ToString(),
16 msheet.Cells.get_Range("B" + (i + 1
), Type.Missing).Text.ToString(),
17 msheet.Cells.get_Range("B" + (i + 2
), Type.Missing).Text.ToString(),
18
conn);
19 i = i + 3;
20
21 }
22 }
23
24 conn.Close();

二快速导入导出

1.我们都知道当向db里批量插入数据的时候我们会选择SqlBulkCopy

if (dataTable!=null && dataTable.Rows.Count!=0)
            {
                sqlBulkCopy.WriteToServer(dataTable);
            }
 

这个可以看 深山老林新发的一篇SQLServer中批量插入数据方式的性能对比下面是SqlBulkCopy的方法,这个方法有一个弊端就是当excel某一列即有文字,还有日期的时候,会出现null值,我在网上查了一些资料说连接字串加上;HDR=YES;IMEX=1'的时候会都当做字符处理,但是还是会出现一些bug,所以建议最好先把excel数据分析到datatable里然后再用SqlBulkCopy倒入数据库

ContractedBlock.gifExpandedBlockStart.gif代码
1 // block copy to DB from Excel
2 //By xijun,
3 //step 1 create an excel file C:\Inetpub\wwwroot\test.xls , fill cell(1,1) with "Data",cell(1,2) with "name"
4 //step 2 create table named "Data" with 2 column ("data","name") in your DB
5 //there the code below:
6 DateTime t1 = DateTime.Now;
7 Response.Write("<br>start time:" + t1.ToString());
8 string ExcelFile = @"C:\\20090916_Hub_Report.xls";
9 string excelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFile + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
10
11 using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))
12 {
13
14 excelConnection.Open();
15 //Getting source data
16 //非空讀入數據
17 OleDbCommand command = new OleDbCommand("Select [Region],[CustomerPN],[RMA],[Date],[QTY],[Return/Pull] FROM [20090916_Hub_Report$] ", excelConnection);
18 // Initialize SqlBulkCopy object
19
20 using (OleDbDataReader dr = command.ExecuteReader())
21 {
22 // Copy data to destination
23 string sqlConnectionString = @"Data Source=MININT-G87PHNA\SQLEXPRESS;Initial Catalog=GDS_Service;Integrated Security=True";
24 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
25 {
26 bulkCopy.DestinationTableName = "GDS_Hub_data";
27 //加入只加入一個列的話,那么就會其他數據庫列都默認為空。
28 bulkCopy.ColumnMappings.Add("Region", "region");
29 bulkCopy.ColumnMappings.Add("CustomerPN", "customer_item_number");
30 bulkCopy.ColumnMappings.Add("RMA", "Rma");
31 bulkCopy.ColumnMappings.Add("Date", "date");
32 bulkCopy.ColumnMappings.Add("QTY", "Qty_1");
33 bulkCopy.ColumnMappings.Add("Return/Pull", "return_pull");
34 //bcp.BatchSize = 100;//每次传输的行数
35 //bcp.NotifyAfter = 100;//进度提示的行数
36 bulkCopy.BatchSize = 100;
37 bulkCopy.NotifyAfter = 100;
38 bulkCopy.WriteToServer((IDataReader)dr);
39
40
41 }
42 }
43 //Closing connection
44 excelConnection.Close();
45 }
46
47 DateTime t2 = DateTime.Now;
48 Response.Write("<br>End time:" + t2.ToString());
49 Response.Write("<br>use time:" + ((TimeSpan)(t2 - t1)).Milliseconds.ToString() + " Milliseconds");
50 Response.Write("<br>inser record count :3307");

 2.快速导出db的数据到excel

这种方法就是利用

Excel.QueryTables 
 Excel.QueryTable

Querytable把数据快速导入excel里。我们在做复杂报表的时候,这个用的是比较多了,但是单单会这个没有用,它只是快速的把db里的数据放放到excel里,

在做大量数据而且需要设定excel样式的时候我们会选择先用这种方法把数据导入excel一个临时sheet,再利sheet复制,sheet移动,和一些excel样式设定,以及

excel一个强大的自动填充的功能,那么这些就可以让我们快速的做出花样多试的excel报表,当然这个要求我们比较熟练office的操作,包括宏的操作。

ContractedBlock.gifExpandedBlockStart.gif代码
1 public string query_table_getdata(string sourpath)
2
{
3 string str_path = sourpath.Substring(0, sourpath.Length - 22
);
4 str_path = str_path + "basic.xls"
;
5

6 Excel.QueryTables m_objQryTables = null;
7 Excel.QueryTable m_objQryTable = null
;
8 Excel.Application m_objExcel = null
;
9 Excel.Workbooks m_objBooks = null
;
10 Excel.Workbook m_objBook = null
;
11 Excel.Sheets m_objSheets = null
;
12 Excel.Worksheet m_objSheet = null
;
13 Excel.Range m_objRange = null
;
14 m_objExcel = new
Excel.Application();
15

16 //try
17 //{

18 m_objBooks = m_objExcel.Workbooks;
19
m_objBooks.Open(sourpath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
20
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
21

22 m_objBook = (Excel.Workbook)m_objBooks.get_Item(1);
23

24
25 m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
26 m_objSheet = (Excel.Worksheet)m_objSheets.get_Item(1
);
27 m_objRange = m_objSheet.get_Range("A2"
, Type.Missing);
28 m_objQryTables =
m_objSheet.QueryTables;
29 string sqlstr = "SELECT [day01],[day02],[day03],[day04],[day05],[day06],[day07],[day08],[day09],[day10],[day11],[day12],[day13],[day14]"
;
30 sqlstr += ",[week01] ,[week02],[week03],[week04],[week05],[week06],[week07],[week08],[week09],[week10],[week11],[week12],[week13],[week14]"
;
31 sqlstr += ",[week15],[week16],[week17],[week18],[week19],[week20],[week21],[week22],[week23],[week24]"
;
32 sqlstr += " FROM [GDS_Service].[dbo].[GDS_Service_Report_Base] order by groupID ,id"
;
33 //可以放在配置文件里

34 string conn = @"Provider=SQLOLEDB.1;Data Source=MININT-G87PHNA\SQLEXPRESS;uid=xijun_ke;Password=12345678;
Initial Catalog=GDS_Service;Persist Security Info=False;";
35

36 m_objQryTable = (Excel.QueryTable)m_objQryTables.Add("OLEDB;" + conn, m_objRange, sqlstr);
37

38 m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
39

40 m_objQryTable.Refresh(false);
41
m_objBook.SaveAs(str_path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
42 m_objBook.Close(false
, Type.Missing, Type.Missing);
43 //
}
44 //
catch (Exception ee)
45 //
{
46 //
mp.WriteLog(ee.ToString());
47 //
}
48 //
finally
49 //{

50 m_objExcel.Quit();
51
GC.Collect();
52 //}

53 return str_path;
54

55 }

com操作excel的一些特性操作:

range.NumberFormatLocal = "@";     //设置单元格格式为文本
range = (Range)worksheet.get_Range("A1""E1");     //获取Excel多个单元格区域:本例做为Excel表头
range.Merge(0);     //单元格合并动作
worksheet.Cells[11= "Excel单元格赋值";     //Excel单元格赋值
range.Font.Size = 15;     //设置字体大小
range.Font.Underline=true;     //设置字体是否有下划线
range.Font.Name="黑体";     设置字体的种类
range.HorizontalAlignment
=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式
range.ColumnWidth=15;     //设置单元格的宽度
range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色
range.Borders.LineStyle=1;     //设置单元格边框的粗细
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //给单元格加边框
range.EntireColumn.AutoFit();     //自动调整列宽
Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式
Range.VerticalAlignment= xlCenter     //文本垂直居中方式
Range.WrapText=true;     //文本自动换行
Range.Interior.ColorIndex=39;     //填充颜色为淡紫色
Range.Font.Color=clBlue;     //字体颜色
xlsApp.DisplayAlerts=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存
   workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字

excel宏操作,sheet和单元格操作:

ContractedBlock.gifExpandedBlockStart.gif代码
1 /// <summary>
2 /// 讀取excel數據和插入公式
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 protected void Button2_Click(object sender, EventArgs e)
7 {
8 DateTime t1 = DateTime.Now;
9 Response.Write("<br>start time:" + t1.ToString());
10 Excel.Application excelkk = new Excel.Application();
11
12 excelkk.Workbooks.Add(true);
13 int row = 2;
14 DataTable myTable = ds.Tables["[Sheet1$]"];
15 for (int i = 0; i < myTable.Columns.Count; i++)
16 {
17 excelkk.Cells[1, 1 + i] = myTable.Columns[i].ColumnName.ToString();
18 }
19 for (int i = 0; i < myTable.Rows.Count; i++)
20 {
21 for (int j = 0; j < myTable.Columns.Count; j++)
22 {
23 excelkk.Cells[row, j + 1] = myTable.Rows[i][j].ToString();
24 }
25
26 row++;
27 }
28
29
30 //取得特定單元格的值
31 excelkk.Visible = true;
32 this.TextBoxChange.Text = excelkk.get_Range("A2", Type.Missing).Text.ToString();
33 //表的單元格合并
34 Excel.Range range1 = excelkk.get_Range("A2", "D4");
35 range1.Merge(Type.Missing);
36
37
38
39
40 //想表格中插入求和的值
41 Excel.Range range2 = excelkk.get_Range("B25", Type.Missing);
42 range2.Formula = "=SUM(B2:B24)";
43 range2.Calculate();
44
45 //進行宏的循環應用與單元格的刪除和添加,多個單元格默認宏自動操作。
46 Excel.Range range3 = excelkk.get_Range("B25","E25");
47 range2.AutoFill(range3,Excel.XlAutoFillType.xlFillDefault);
48 //刪除表的指定行數操作
49 Excel.Range range7 = null;
50 range7 = excelkk.get_Range(excelkk.Cells[2, 2], excelkk.Cells[4, 4]);
51 range7.Select();
52 range7.EntireRow.Delete(Excel.XlDirection.xlUp);
53
54 //獲取最大用過的行數
55 Excel.Worksheet wsheet1 = (Excel.Worksheet)excelkk.Worksheets.get_Item(1);
56 int n =wsheet1.UsedRange.Cells.Columns.Count;
57 Response.Write(n.ToString() + "<br>");
58 //MessageBox.Show(n.ToString());
59 n = wsheet1.UsedRange.Cells.Rows.Count;
60 Response.Write(n.ToString() + "<br>");
61 //MessageBox.Show(n.ToString());
62 //數據的複製
63 Excel.Range range4 = excelkk.get_Range("A2", "B25");
64 Excel.Range range5 = excelkk.get_Range("E3", "F25");
65 //range4.get_Offset(1,4).Select();
66 range4.Copy(range5);
67 //停用警告信息
68 excelkk.DisplayAlerts = false;
69 GC.Collect();
70
71 }
72
73
74 單個sheet里求和:
75 Excel.Range range2 = excelkk.get_Range("B25", Type.Missing);
76 range2.Formula = "=SUM(B2:B24)";
77 range2.Calculate();
78
79 跨sheet求和:
80 Excel.Worksheet wsheet1 = (Excel.Worksheet)excelSql.Worksheets.get_Item(1);
81 Excel.Range range3 =wsheet1.get_Range("A23", Type.Missing);
82 range3.Formula = "=Sheet3!B8+Sheet3!B12";
83 range3.Calculate();
84

虽然我们拥有强大的NPOI,不过我还是写出来,希望对大家理解office有一定的用处。

转载于:https://www.cnblogs.com/MR_ke/archive/2010/03/02/1676210.html

相关文章:

383. Ransom Note/691. Stickers to Spell Word-- String, Map, back tracking-- 未完待续

383 easy 题&#xff0c;就是建立字母的hash 表 看第一个String 是否能被第二个String 所构建 canConstruct("aa", "aab") -> true 统计 第二个参数中每个字母的频率&#xff0c;可以用一个int[256] 建立hashmap, 然后统计 第一个String 中字母出现的…

Centos 修改时间地区及NTP同步北京时间

在我们使用CentOS系统的时候&#xff0c;也许时区经常会出现问题&#xff0c;有时候改完之后还是会出错&#xff0c;下面我们就来学习一种方法来改变这个状况。如果没有安装&#xff0c;而你使用的是 CentOS系统 那使用命令 yum install ntp 然后&#xff1a;ntpdate us.pool.n…

PAT(甲级)2019年冬季考试 7-2 Block Reversing

这题是做过的&#xff0c;B1025&#xff0c;我还总结过&#xff0c;果然早晚复相逢&#xff0c;只改了一点点&#xff0c;见1025 反转链表。 点睛之笔是结构体数组的哈希&#xff0c;地址既做下标&#xff0c;又有实际含义&#xff0c;妙啊。 node[add].add add; 当时应该是…

题目1444:More is better

时间限制&#xff1a;3 秒 内存限制&#xff1a;100 兆 特殊判题&#xff1a;否 提交&#xff1a;1362 解决&#xff1a;640 题目描述&#xff1a;Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the bette…

COMP 0137 Machine Vision

COMP 0137作业代做、Python实验作业代写、代做Python语言程序作业、代写Machine Vision作业COMP 0137 Machine Vision: Homework #1Due 19th November 2018 at 23:55pmWorth 10% of your overall gradeSubmit online, through MoodleFor this homework, we’ll revisit the pra…

windows mobile shell API

SHSetNavBarText 设置NavBar 文本信息 SHDoneButton 设置右上角button为关闭&#xff0c;还是最小化。 SHFullScreen 全屏&#xff0c;显示隐藏taskbar 软键盘button 开始图标 SHInitDialog 实例化对话框 SHInitDialogFlags 设置dialog参数…

PAT(甲级)2019年秋季考试 7-3 Postfix Expression

只在编译原理学过一点后序表达式&#xff0c;我把这题当作普通的二叉树遍历&#xff0c;事实上也的确如此。我注意到“-”这个符号不一样&#xff0c;别的都是后序遍历&#xff0c;但是遇到这个负号/减号就变成了先序。 于是我对负号做特判&#xff0c;遇到值为负号就改后序为…

(翻译)LearnVSXNow! #6 - 创建我们第一个工具集 - 序幕

在前面的文章中,我们在向导的帮助下创建了一些小的VSPackages。在第五讲中我们整理了VSX的一些思路和概念&#xff0c;深入VSPackages 了解了packages如何工作以及服务的机制。在这篇文章中我们继续向前。 本文我们开始创建一个工具集来帮助我们创建容易编写和理解的代码。我计…

Spring事务管理的底层逻辑—源码解析

本文代码为spring 5.1.2spring是如何控制事务的提交和回滚 加上Transactional注解之后&#xff0c;Spring可以启到事务控制的功能了&#xff0c;再正式执行方法前它会做一些操作&#xff0c;我们来看看 首先进入CglibAopProxy.class的intercept方法或者JdkDynamicAopProxy.clas…

[codevs 1913] 数字梯形问题

[codevs 1913] 数字梯形问题 题解&#xff1a; 本题就是加强版的 [codevs 1033] 蚯蚓的游戏问题。分别针对三个规则建图、运行最小费用最大流。规则1&#xff1a;从梯形的顶至底的m条路径互不相交。分析&#xff1a;因为要互不相交&#xff0c;所以每个点只能走一次&#xff0c…

PAT(甲级)2019年秋季考试 7-2 Merging Linked Lists

又是老朋友链表输出题&#xff0c;依然采用哈希静态存储&#xff0c;但是这题稍复杂的是&#xff0c;有两条链表&#xff0c;但是我们可以默认link1>link2&#xff0c;然后让link2上的节点接着link1后面编号&#xff0c;并且注意link2是倒序输出的。 输出时有几个关键点&am…

Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

flash终究只是客户端技术&#xff0c;所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的&#xff0c;下面的代码演示了如何在flash中打开网页&#xff0c;以及用GET/POST二种方式向服务端发送数据//按下按钮&#xff0c;打开网页 btnOpen.addEvent…

【Mood 19】DailyBuild 2月

2月1号 仿美团loading时小人奔跑动画 HTML5定稿了&#xff0c;为什么原生App世界将被颠覆&#xff1f; -----HTML5一改过去卡顿不兼容的毛病&#xff0c;在硬件升级以及苹果谷歌策略变化的背景下&#xff0c;让自己的优势相对于原生开发更加明显起来&#xff1a; 对开发者的“跨…

(二)spring cloud微服务分布式云架构 - 整合企业架构的技术点

spring cloud本身提供的组件就很多&#xff0c;但我们需要按照企业的业务模式来定制企业所需要的通用架构&#xff0c;那我们现在需要考虑使用哪些技术呢&#xff1f; 下面我针对于spring cloud微服务分布式云架构做了以下技术总结&#xff0c;希望可以帮助到大家&#xff1a; …

用拓扑排序检测有向图中是否有环

目录 算法主要步骤 代码 测试数据 提示&#xff1a;由于拓扑排序的检测方式不涉及到边权或点权&#xff0c;所以拓扑序列中的正环和负环都能够被检测出来。检测可达负环可以用Bellman-Ford或者SPFA。 算法主要步骤 1. 记录每个结点的入度&#xff0c;设置一个队列&#xf…

关于大型网站技术演进的思考(五)--存储的瓶颈(5)

上文里我遗留了两个问题&#xff0c;一个问题是数据库做了水平拆分以后&#xff0c;如果我们对主键的设计采取一种均匀分布的策略&#xff0c;那么它对于被水平拆分出的表后续的查询操作将有何种影响&#xff0c;第二个问题就是水平拆分的扩容问题。这两个问题在深入下去&#…

Project Chameleon Work In Progress 10

现在的进展是&#xff0c;UMDF驱动的DeviceIOControl和Read、Write已经都能使用了&#xff0c;并且FX2LP的EP6IN也正常工作&#xff0c;下面是工作中的测试代码截图&#xff1a; 转载于:https://www.cnblogs.com/skogkatt/archive/2010/03/13/4163356.html

maven项目中 把依赖的jar包一起打包

2019独角兽企业重金招聘Python工程师标准>>> Maven1-HelloWorld简单入门 使用Maven Assembly plugin将依赖打包进jar 1、pom.xml 配置文件&#xff1a; 在pom.xml配置文件中添加 <build> <plugins> <plugin> <artifactId>maven-assembly…

PAT(甲级)2019年春季考试 7-4 Structure of a Binary Tree

目录 整体思路 犯的错误 代码 整体思路 1.先根据后序和中序序列建树&#xff0c;老生常谈&#xff0c;记得返回root 2.对树进行BFS&#xff0c;在这个过程中用hash的方式记录下每个值对应的父节点、左孩子、右孩子的值&#xff0c;记录下深度(即层数)&#xff0c;还有孩子…

vs2008 常用快捷键

编辑快捷键 CtrlB,T 切换书签开关 CtrlB,N 移动到下一书签 CtrlB,P 移动到上一书签 CtrlB,C 清除全部标签 CtrlI 渐进式搜索 CtrlShiftI反向渐进式搜索 F12 转到定义 AltF12 查找符号(列出所有查找结果) CtrlF 查找 CtrlH 替换 CtrlShi…

我理解的观察者模式

什么是观察者模式&#xff1f; 当对象间存在一对多关系时,比如&#xff0c;当一个对象被修改时&#xff0c;则会自动通知它的依赖对象。观察者模式也叫做发布订阅模式。 观察者模式有什么好处&#xff1f; 观察者模式中&#xff0c;被观察者发生改变时&#xff0c;会自动通知所…

PAT(甲级)2019年春季考试 7-3 Telefraud Detection

1. 这题复杂在诈骗检测算法的理解 怎样的一个人会被判定成嫌疑犯呢&#xff1f; 他打出给别人的累计通话时长的不同的人数大于K 注意&#xff1a;不同和累计 怎样的两个人会被判定成同伙呢&#xff1f; 相互之间有通话记录 2. 同伙的合并我采用的并查集&#xff0c;在设置…

Linux基础命令---diffstat

diffstat这个程序读取diff的输出&#xff0c;并显示每个文件的插入、删除和修改的直方图。Diffstat是一个用于检查大型复杂修补程序文件的程序。它从包含diff输出的一个或多个输入文件中读取&#xff0c;生成针对引用的每个文件更改的总行的直方图。如果输入文件名以.bz 2、.gz…

两个asp.net发送邮件类

代码 //第一个usingSystem;usingSystem.Text;usingSystem.Net.Mail;namespaceCars.Tootls.Tools{ publicclassEmail { privateEmail() { } ///<summary>///发送邮件 ///</summary>///<param name"Su…

symfony2是什么?

首先&#xff0c;symfony2是一个松散的&#xff0c;独立的&#xff0c;有组织严密的php组件的集合&#xff0c;它可以为你解决一些web开发中一般性的问题。 其次&#xff0c;基于这些组件&#xff0c;php又可以作为一个独立web框架使用。 转载于:https://www.cnblogs.com/ljcph…

PAT(甲级)2019年春季考试 7-2 Anniversary

注意点 1. 记录是不是校友&#xff0c;有两种方法 &#xff08;1&#xff09;map<string,int> mp mo[guest] 1 判断mp[comer] &#xff08;2&#xff09;set<string> st st.insert(guest) st.count(comer) 2. 由于只需要输出年龄最大的&…

根据总用量计算每种包装规格的购买量和总价

最近有这么一个需求&#xff0c;就是给出客户需要的总量&#xff0c;然后根据数据库记录的包装规格&#xff0c;计算出客户需要购买的包装规格种类和个数&#xff0c;而且要保证客户的花费最小。 示例图片效果 示例代码实现如下。欢迎大家一起讨论。 代码 using System;using S…

5个在线调试代码的网站

对于编程开发的人来说&#xff0c;有个快速测试代码的地方是非常方便重要的&#xff0c;这里&#xff0c;我们收集了5个很好用的在线调试网站。 1.codepad 是一款简单的在线 IDE 编辑器服务&#xff0c;你只需要把代码粘贴进去就可以编译运行了&#xff0c;连工程也不需要新建&…

Windows 日志高级筛选实践

背景经常需要查看日志&#xff0c;不仅是用来排错&#xff0c;有些时候我还需要监控系统来抓取特定日志来帮助减少我的工作负担&#xff0c;以及时监控到异常出现&#xff0c;并作出通知及响应&#xff0c;那么从大量日志中快速并精确筛选出想要的日志&#xff0c;并且精确提取…

PAT(甲级)2018年秋季考试 7-1 Werewolf - Simple Version

1. 我设置了一个结构体变量存储每个人的指控信息 struct IF{int type 0;int no; }; 这里我发现了一件事&#xff0c;如果结构体只有有参数的构造函数&#xff0c;那么直接声明该结构体类型的数组是不行的。但是好处是数组知道下标可以直接赋值。 也就是这样组合最好&#x…