做下记录,
首先插入一个dataGridView控件,两个button按钮(导入数据,导出数据),一个ComboBox(获取列标题使用),一个textbox(输入关键字),一个定位按钮(定位使用)
1,导入数据(NPOI)
1
2 private void daoRuShuJu_cmd_Click(object sender, EventArgs e)
3 {
4 DataTable daNpoi = new DataTable();
5 string fileName = Application.StartupPath;
6 fileName += "\\4G模组表.xls";
7 string sheetName = "4G模组情况表";
8 bool isColumnName = true;
9 IWorkbook workbook;
10 string fileExt = Path.GetExtension(fileName).ToString();
11 using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
12 {
13 if (fileExt == ".xlsx")
14 {
15 workbook = new XSSFWorkbook(fs);
16 }
17 else if (fileExt == ".xls")
18 {
19 workbook = new HSSFWorkbook(fs);
20 }
21 else
22 {
23
24 workbook = null;
25 }
26
27 ISheet sheet = null;
28 if (sheetName != null && sheetName != "")
29 {
30 sheet = workbook.GetSheet(sheetName);
31 if (sheet == null)
32 {
33 sheet = workbook.GetSheetAt(0);
34 }
35
36 }
37 else
38 {
39 sheet = workbook.GetSheetAt(0);
40 }
41
42 IRow header = sheet.GetRow(sheet.FirstRowNum);
43 int startRow = 0;
44 if (isColumnName)
45 {
46 startRow = sheet.FirstRowNum + 1;
47 for (int i = header.FirstCellNum; i < header.LastCellNum; i++)
48 {
49 ICell cell = header.GetCell(i);
50 if (cell != null)
51 {
52 string cellValue = cell.ToString();
53 if (cellValue != null)
54 {
55 DataColumn col = new DataColumn(cellValue);
56 daNpoi.Columns.Add(col);
57 }
58 else
59 {
60 DataColumn col = new DataColumn();
61 daNpoi.Columns.Add(col);
62 }
63 }
64 }
65 }
66
67 for (int i = startRow; i <= sheet.LastRowNum; i++)
68 {
69 IRow row = sheet.GetRow(i);
70 if (row == null)
71 {
72 continue;
73 }
74 DataRow dr = daNpoi.NewRow();
75 for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
76 {
77
78 if (row.GetCell(j) != null)
79 {
80 dr[j] = row.GetCell(j).ToString();
81 }
82 }
83 daNpoi.Rows.Add(dr);
84 }
85 }
86
87 dataGridView1.DataSource = daNpoi;
88 }
2,导出数据(NPOI)
1 private void baoCunShuJu_cmd_Click(object sender, EventArgs e)
2 {
3 DataTable dtTable = dataGridView1.DataSource as DataTable;
4 string sheetName = "4G模组情况表"; //sheet名字
5 IWorkbook wb = new HSSFWorkbook();
6 ISheet sheet = string.IsNullOrEmpty(sheetName) ? wb.CreateSheet("sheet1") : wb.CreateSheet(sheetName);
7 int rowIndex = 0;
8 if (dtTable.Columns.Count > 0)
9 {
10 IRow header = sheet.CreateRow(rowIndex);
11 for (int i = 0; i < dtTable.Columns.Count; i++)
12 {
13 ICell cell = header.CreateCell(i);
14 cell.SetCellValue(dtTable.Columns[i].ColumnName);
15 }
16 }
17 if (dtTable.Rows.Count > 0)
18 {
19 for (int i = 0; i < dtTable.Rows.Count; i++)
20 {
21 rowIndex++;
22 IRow row = sheet.CreateRow(rowIndex);
23 for (int j = 0; j < dtTable.Columns.Count; j++)
24 {
25 ICell cell = row.CreateCell(j);
26 cell.SetCellValue(dtTable.Rows[i][j].ToString());
27 }
28 }
29 }
30
31 for (int i = 0; i < dtTable.Columns.Count; i++)
32 {
33 sheet.AutoSizeColumn(i);
34 }
35
36 string fileName = Application.StartupPath; // debug 目录
37 fileName += "\\4G模组表.xls"; //excel 名字
38 using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
39 {
40 wb.Write(fs);
41 }
42 MessageBox.Show("保存成功");
43 }
3,删除空行函数
// 删除空白行调用函数,在不需要用户添加新行或者数据的时候使用,ALLowUsertoAddRows 这个属性需要设置false
//如果ALLowUsertoAddRows 这个属性是true,则,用户可以输入数据,但是row < view.Rows.Count需要 -1不去判断最后一行
// 所以传入的x根据情况更改,想用户可以输入,ALLowUsertoAddRows的值为true, x=0;
//不想用户输入ALLowUsertoAddRows的值为false x=1;
1 private void clearGrid(DataGridView view, int x)
2 {
3 for (int row = 0; row < (view.Rows.Count - x); ++row)
4 {
5 bool isEmpty = true;
6 for (int col = 0; col < view.Columns.Count; ++col)
7 {
8 object value = view.Rows[row].Cells[col].Value;
9 if (value != null && value.ToString().Length > 0)
10 {
11 isEmpty = false;
12 break;
13 }
14 }
15 if (isEmpty)
16 {
17 view.Rows.RemoveAt(row--);
18 }
19 }
20 }
4,获取excel的列标题,给ComboBox控件
1 public void huoQu_Column() //把excel表各列标题弄到combobox上
2 {
3 // int Rowcount = dataGridView1.RowCount;//获取datagridview的行数
4 int Columncount = dataGridView1.ColumnCount;//获取datagridview的列数
5 // dataGridView2.ColumnCount = Columncount; //新增列
6 // dataGridView2.ColumnHeadersVisible = true; //新增的列显示出来
7 for (int i = 0; i < Columncount; i++)
8 {
9 string var = this.dataGridView1.Columns[i].HeaderText;
10 // this.dataGridView2.Columns[i].HeaderText = this.dataGridView1.Columns[i].HeaderText; //2的列名和1的一样
11 // dataGridView2.Columns[i].MinimumWidth = dataGridView1.Columns[i].MinimumWidth; //2的列宽和1 一样
12 // = dataGridView1.Rows[0].Cells[i].Value.ToString();
13 lie_ming_cb.Items.Add(var);
14 // lie_ming_cb_1.Items.Add(var);
15 // if (var == "IMEI")
16 // {
17 // lie_ming_cb_1.SelectedIndex = i;
18 // }
19 }
20 lie_ming_cb.SelectedIndex = 0;
21 }
5,定位,可以在每个列里根据关键字去查找,并且定位到行,可实现下一条功能
1 int xiayitiao_int = 0; //下一条标记
2
3 private void chaZhao_bt_1_Click(object sender, EventArgs e) //定位按钮
4 {
5 DataTable rentTable = (DataTable)dataGridView1.DataSource;//获取数据源
6 int r = 0;
7 bool dingwei_f; //定位标记,
8
9
10 if ((guanJianZi_box.Text != "") && (guanJianZi_box.Text != "/请输入关键字/"))
11 {
12 for (int i = xiayitiao_int; i < rentTable.Rows.Count; i++)
13 {
14 dingwei_f = rentTable.Rows[i][lie_ming_cb.Text].ToString().Contains(guanJianZi_box.Text); //对比字符串,
15
16 if (dingwei_f)
17 {
18 //指定行
19 dataGridView1.ClearSelection();
20 dataGridView1.Rows[i].Selected = true;
21 //让指定行处于选中状态(状态)
22 dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[1];
23 dataGridView1.CurrentRow.Selected = true;
24 dingwei_f = false;
25 xiayitiao_int = i+1; //下一条的标记
26 r++;
27 return;
28 }
29 }
30 if (r > 0)
31 {
32
33 }
34 else
35 {
36 MessageBox.Show("没有匹配项或已经是最后一条,将从第一条继续查找", "提示");
37 xiayitiao_int = 0; //重新查找
38 }
39 }
40 else
41 {
42 MessageBox.Show("请输入正确的关键字", "提示");
43 }
44 }
6,textbox可以敲回车直接查找,需要添加textbox的KeyDown事件
private void guanJianZi_box_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyValue == 13)
{
chaZhao_bt_1_Click(sender, e);
}
}
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po