经过10年的编程,我发现自己在Excel 2007中创建我的第一个Excel应用程序是一项艰巨的任务.我之前在MS Access上编程了VBA,所以这对我来说不是真正的技术挑战,但它是"范式"的真正变化我敢说.
现在我必须实现一个与SQLServer对话的Excel应用程序(在我创建的专用数据库上),典型的CRUD内容,但我在任何一本书上都看不到(Excel Bible,Excel Power Programming等),我是怎么做的应该构建应用程序.
我可以为我的列命名,并在将数据发送回SQLServer时将它们用作数据库列
当我检索数据时我想要的电子表格应用程序,例如我检索ID,描述(将ID隐藏在列中并显示描述),或者我应该只使用描述一切并在我的SQLServer表中存储非规范化数据,使它们相当于服务器端Excel表格?
如果我想使用像LookupTable(ID,Country)这样的标准化数据,我应该将ID,Country信息存储在Range中,如果是这样,我如何强制用户从该范围(ID,Country)中选择一个值而不使用一个合适的Combobox?
当我从SQLServer检索数据时,我应该将其建模到ADODB.Recordset中(例如通过调用视图或存储过程)并将其复制到Sheet中,确保Recordset中的字段顺序与Sheet中的相同或者,还有更好的方法?
我确信有很多人了解我的情况,因为他们一直在我的鞋子里,请帮助我做一些有助于我理解电子表格应用世界的跳转.指向网络资源的指针也非常受欢迎.
谢谢.
如何删除excelsheet(列)中的重复项,其中必须删除具有多个匹配项的项:
1  
2  
3  
3  
4  
4  
如果我们使用remove duplicate选项,它将给出不同的值,但是应该做什么才能获得值
1  
2  
由于1和2值不重复,因此这两个值在Excel(列)中只有一个出现
我昨天尝试将以下代码放入程序中.VBA称错误.我认为这是因为公式中的双引号.我用谷歌搜索,我发现的所有结果都给出了公式的基本内容,但没有一个解释如何绕过里面的引号.
(在此之前有一个With语句,Pivot是一个工作表名称)
.Range("A2").Formula = "=IF(Pivot!A5="",A1,Pivot!A5)" 
任何帮助深表感谢.谢谢!
我在互联网上发现了很多资源,几乎可以做我想做的事情,但并不完全.我有一个命名范围"daylist".对于dayList中的每一天,我想在用户表单上创建一个按钮,该按钮将运行当天的宏.我可以动态添加按钮,但不知道如何将daycell.text从命名范围传递到按钮,事件处理程序,再到宏:S继承我必须创建用户表单的代码:
Sub addLabel()
ReadingsLauncher.Show vbModeless
Dim theLabel As Object
Dim labelCounter As Long
Dim daycell As Range
Dim btn As CommandButton
Dim btnCaption As String
For Each daycell In Range("daylist")
    btnCaption = daycell.Text
    Set theLabel = ReadingsLauncher.Controls.Add("Forms.Label.1", btnCaption, True)
    With theLabel
        .Caption = btnCaption
        .Left = 10
        .Width = 50
        .Top = 20 * labelCounter
    End With
    Set btn = ReadingsLauncher.Controls.Add("Forms.CommandButton.1", "runButton", True)
    With btn
        .Caption = "Run Macro for " & btnCaption
        .Left = 80 …我想让一个单元格等于它上面的单元格.
当我写作
=address(row()-1;column())
它只是写上面单元格的名称(例如对于B2,它写入$ B $ 1)
是否有一个输入地址并输入值的函数?
我想要显示一个数据透视表,并向它显示实际值,每行一个,而不是值的总和.例如
Name    Jan   Feb   Mar   Apr
Bob     12    10          4
        3     5      
James   2     6     8     1
                    15
等等
我的出发点是有三列:Name,Value和Month.
这可能而不必做一些完全不同的事情吗?
我正在使用Apache POI生成Excel文件(2007).我想要的是保护工作表,但启用了一些选项.通过选项我的意思是当您尝试保护Excel应用程序中的工作表时(在"允许此工作表的所有用户为:"标签下)的复选框列表.具体来说,我想启用"选择锁定/未锁定的单元格","格式列","排序"和"允许自动过滤".非常感谢你!:d
例如,
XSSFCellStyle style=(XSSFCellStyle) workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("#.##"));
productCell.setCellValue(12.4);
productCell.setCellType(Cell.CELL_TYPE_NUMERIC);
productCell.setCellStyle(style);
这将显示12.4在指定的单元格中.它应该是12.40.12显示的值12.非常不必要.
如果该值是0,则显示一个点..它应始终显示两位小数 - 0.00在这种情况下,无论存储在单元格中的值如何.
如何强制excel始终在数字单元格中显示两位小数?
我使用以下样式之一来显示数字单元格.
XSSFColor commonColor = new XSSFColor(new java.awt.Color(240, 240, 240));
XSSFColor cellBorderColour = new XSSFColor(new java.awt.Color(0, 76, 153));
Font font = workbook.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
font.setColor(IndexedColors.DARK_BLUE.index);
XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle();
style.setFillForegroundColor(commonColor);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(CellStyle.ALIGN_RIGHT);
style.setFont(font);
style.setBorderLeft(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, cellBorderColour);
style.setBorderTop(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.TOP, cellBorderColour);
style.setBorderRight(BorderStyle.HAIR);
style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, cellBorderColour);
style.setBorderBottom(BorderStyle.DOUBLE);
style.setBottomBorderColor(cellBorderColour);
我应用了一些excel公式来对数字单元格执行一些计算,这些数字单元格应该在数字单元格上应用数字格式(向上舍入一半)之后执行.
我使用VS 2008和VSTO开发了一个新的Office 2007插件.之后我去Office-> Excel选项 - > AddIns-> COM AddIns和GO ...如果我选择我创建的.dll我得到错误
'<path>' is not a valid Office Add In.
如果我在我的开发机器上使用Visual Studio 2008运行它,它工作正常,我看到加载项.
我搜索了很多帖子,但没有得到解决方案.
有谁知道如何使用Excel VBA检查Excel文档中是否存在某些工作表?
excel-2007 ×10
excel ×8
vba ×4
excel-vba ×3
apache-poi ×2
java ×2
add-in ×1
architecture ×1
duplicates ×1
if-statement ×1
ms-office ×1
pivot-table ×1
vsto ×1